$ emerge -av crossdev
Create a stable armv7a-hardfloat-linux-gnueabi tool chain for the Cubieboard2:
$ crossdev -S -t armv7a-hardfloat-linux-gnueabi
$ mkdir gentoo-cb2 $ cd gentoo-cb2 $ git clone https://github.com/linux-sunxi/u-boot-sunxi.git $ cd u-boot-sunxi
Start clean and configure Cubieboard2 default u-boot parameters
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make distclean $ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make Cubieboard2_config
should return
Configuring for Cubieboard2 - Board: sun7i, Options: CUBIEBOARD2,SPL,SUNXI_GMAC,STATUSLED=244,STATUSLED1=245,FAST_MBUS
Build u-boot
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make -j4
should return something like
tools/mkimage -A arm -T firmware -C none \ -O u-boot -a 0x4a000000 \ -e 0 \ -n "U-Boot 2014.01-rc1-09153-gc75ea90 for sunxi board" \ -d u-boot.bin u-boot.img Image Name: U-Boot 2014.01-rc1-09153-gc75ea9 Created: Wed Jan 8 10:47:48 2014 Image Type: ARM U-Boot Firmware (uncompressed) Data Size: 227820 Bytes = 222.48 kB = 0.22 MB Load Address: 4a000000 Entry Point: 00000000 tr "\000" "\377" < /dev/zero | dd ibs=1 count=32768 \ of=spl/sunxi-spl-pad.bin 2>/dev/null
and produce the following files we will need:
-rw-r--r-- 227884 Jan 8 10:47 ./gentoo-cb2/u-boot-sunxi/u-boot.img -rwxr-xr-x 17644 Jan 8 10:47 ./gentoo-cb2/u-boot-sunxi/spl/u-boot-spl.bin
$ cd .. $ git clone https://github.com/linux-sunxi/linux-sunxi.git $ cd linux-sunxi $ git checkout sunxi-3.4
Use default config to get something to start with
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make sun7i_defconfig
Tweak your kernel according to your wishes
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make menuconfig
The kernel seems to fail to compile when the following settings are enabled:
Solution: Disable RF Switch subsystem support (not needed on CB2 anyways).
Solution: Disable Run-time PM core functionality or apply the following patch.
--- arch/arm/mach-sun7i/pm/standby/mem_printk.c 2014-01-08 12:42:26.641644236 +0100 +++ /tmp/mem_printk.c 2014-01-08 12:42:18.706835502 +0100 @@ -165,7 +165,7 @@ int negative = 0; //defualt is positive value int i; int j; - char digit_string[] = "0123456789ABCDEF"; + char * digit_string = "0123456789ABCDEF"; if(value == 0) { @@ -211,7 +211,7 @@ char stack[16]; int i; int j; - char digit_string[] = "0123456789ABCDEF"; + char * digit_string = "0123456789ABCDEF"; if(value == 0) { @@ -366,7 +366,7 @@ { //fill with space ' ' when align request, //the max align length is 16 byte. - char fill_ch[] = " "; + char * fill_ch = " "; if (len < align) { //fill at right
Compile kernel
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make -j4 uImage
Image Name: Linux-3.4.75-00001-g9cfbbed-dirt Created: Wed Jan 8 12:55:16 2014 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 4385184 Bytes = 4282.41 kB = 4.18 MB Load Address: 40008000 Entry Point: 40008000 Image arch/arm/boot/uImage is ready
Compile modules
$ CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make -j4 modules
$ cd .. $ git clone https://github.com/linux-sunxi/sunxi-tools.git $ cd sunxi-tools $ make bin2fex fex2bin $ git clone https://github.com/linux-sunxi/sunxi-boards.git
emerge -pv nginx pycurl mjpg-streamer
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream "octoprint" { server 127.0.0.1:5000; } upstream "framecam" { server 127.0.0.1:8080; } server { listen 80; server_name feliks; client_max_body_size 50M; location /framecam/ { proxy_pass http://framecam/; proxy_buffering off; } location /sockjs { proxy_pass http://octoprint; # NO trailing slash proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } location / { set $pp_d http://127.0.0.1:5000; if ( $args = 'action=stream' ) { set $pp_d http://127.0.0.1:8080/$is_args$args; } if ( $args = 'action=snapshot' ) { set $pp_d http://127.0.0.1:8080/$is_args$args; } proxy_pass $pp_d; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Request-Start $msec; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }