====== picoPrint Software Documentation ======
===== Install Gentoo Linux on Cubieboard2 =====
==== Install & bootstrap crossdev ====
$ emerge -av crossdev
Create a stable armv7a-hardfloat-linux-gnueabi tool chain for the Cubieboard2:
$ crossdev -S -t armv7a-hardfloat-linux-gnueabi
==== Install and compile u-boot ====
$ 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
==== Install and compile kernel ====
=== Get the sources ===
$ cd ..
$ git clone https://github.com/linux-sunxi/linux-sunxi.git
$ cd linux-sunxi
$ git checkout sunxi-3.4
=== Prepare the kernel ===
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:**
* Networking support -> [*] RF Switch subsystem support
//Solution: Disable RF Switch subsystem support (not needed on CB2 anyways).//
* Power Management options -> [*] Run-time PM core functionality
//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
==== Install and compile sunxi-tools ====
$ 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
===== GPIOs =====
http://docs.cubieboard.org/tutorials/common/using_python_program_control_gpios
===== nginx config =====
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;
}
}
}
{{tag>lab 3d-printer picoprint robot cubieboard gentoo}}
{{keywords>Apollo-NG hackerspace hacker space development makerspace fablab lab community open-resource open resource mobile hackbus 3d-printer picoprint robot cubieboard gentoo}}
~~DISCUSSION~~