Install crossdev and u-boot tools on host system
1 | emerge crossdev dev-embedded /u-boot-tools
|
Install toolchain to build target system
1 2 3 4 5 | crossdev -S -t armv7a-hardfloat-linux-gnueabi --k 3.4
cp /usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4 .7.3 /libstdc ++.so.6.<x>.<x> /usr/armv7a-hardfloat-linux-gnueabi/lib/
cd /usr/armv7a-hardfloat-linux-gnueabi/lib
ln -s libstdc++.so.6.<x>.<x> libstdc++.so.6
cp /usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4 .7.3 /libgcc_s .so.1 /usr/armv7a-hardfloat-linux-gnueabi/lib/
|
Configure emerge for target system
Add/replace next variables in make.conf:
MARCH_TUNE="-mfloat-abi=hard -mfpu=neon -mcpu=cortex-a8 -mtune=cortex-a8 -funroll-loops"
USE="${ARCH} zlib bindist make-symlinks embedded -udev mdev"
Install base system
1 | ARCH=arm armv7a-hardfloat-linux-gnueabi-emerge -a busybox dropbear dhcpcd
|
Build u-boot
Clone sunxi u-boot:
1 | git clone https: //github .com /linux-sunxi/u-boot-sunxi .git
|
Configure uboot target board. replaces sun4i_config with your value:
1 2 | ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make sun4i_config
ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make
|
Follow this guide http:///Bootable_SDCard to make bootable SD card.
Build kernel
Clone sunxi kernel repository:
1 | git clone https: //github .com /linux-sunxi/linux-sunxi .git
|
Make default config:
1 | make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- sun4i_defconfig
|
Next make optional changes in kernel using menuconfig xconfig config etc.:
1 | make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- menuconfig
|
Build kernel:
1 | make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi-
|
Build modules you have choosed:
1 | make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- modules
|
Install modules:
1 | make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- INSTALL_MOD_PATH= /usr/armv7a-hardfloat-linux-gnueabi modules_install
|
See also http:///Linux_Kernel
Build UMP library
Clone sunxi libump:
1 | git clone https: //github .com /linux-sunxi/libump .git
|
Build libUMP:
1 2 3 4 | autoreconf -i
ARCH=arm CFLAGS= "-mfloat-abi=hard -mfpu=neon -mcpu=cortex-a8 -mtune=cortex-a8 -funroll-loops" CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- CC=armv7a-hardfloat-linux-gnueabi- gcc . /configure --host=armv7a-hardfloat-linux-gnueabi --prefix= /usr/armv7a-hardfloat-linux-gnueabi/usr/
make
make install
|
Build mali drivers
Of course it’s not build it’s just copying of valid libraries to sysroot
I recommend you use this version sunxi-mali instead of native repository
1 2 | DESTDIR= /usr/armv7a-hardfloat-linux-gnueabi prefix= /usr CC=armv7a-hardfloat-linux-gnueabi- gcc CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make ABI=armhf VERSION=r3p0
DESTDIR= /usr/armv7a-hardfloat-linux-gnueabi prefix= /usr CC=armv7a-hardfloat-linux-gnueabi- gcc CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- make install
|
Building Qt5
Copy linux-arm-sunxi-g++ from here to qt-everywhere-opensource-src-5.x.x/qtbase/mkspecs/
Patch eglfshoocks with eglfs.patch:
1 | patch -p1 -i . /eglfs .patch
|
Build qt:
1 2 3 | . /configure -release -opensource -confirm-license -no-c++11 -no-largefile -no-accessibility -xplatform linux-arm-sunxi-g++ -qt-zlib -qt-libpng -qt-libjpeg -no-openssl -qt-pcre -no-cups -no-pch -no-dbus -no-xcb -no-directfb -linuxfb -opengl es2 -nomake examples -nomake tools - make libs -qpa eglfs - v -device-option CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -sysroot /usr/armv7a-hardfloat-linux-gnueabi -prefix /usr/local/qt5
make -j5
make install
|
Manual boot from tftp
Interrupt u-boot by pressing any key while boot countdown – shell is available
1 2 3 4 5 6 7 | setenv serverip 192.168.0.70
setenv ipaddr 192.168.0.87
setenv ethaddr 00:1E:AC:87:87:87
setenv bootargs console=ttyS0,115200 console=tty0 root= /dev/mmcblk0p2 rootwait panic=10
tftp 0x43000000 script.bin
tftp 0x48000000 uImage
bootm 0x48000000
|
Misc
Add necessary system directories
proc, sysfs, devfs filesystems are necessary to correct work. So need to create mountpoints /dev /sys /proc in sysroot before deploy to sdcard
1 2 3 | mkdir /usr/armv7a-hardfloat-linux-gnueabi/dev
mkdir /usr/armv7a-hardfloat-linux-gnueabi/proc
mkdir /usr/armv7a-hardfloat-linux-gnueabi/sys
|
Create your own startup
Bysubox’s init is using /etc/inittab configuration file to manage runlevels.
By default(if /etc/inittab is not exist) it’s using
::sysinit:/etc/init.d/rcS
So simple /etc/init.d/rcS you can get from here.
In the future I’ll upgrade runlevel system, but currently it’s only one script.
Dropbear startup
Create dropbear ssh keys:
1 2 3 4 | mkdir -p /etc/dropbear
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key
|
Add scp support
1 | ln -s /usr/bin/dropbearmulti /usr/bin/scp
|
Create passwd for root
1 2 3 | echo root:x:0:0:root: /root : /bin/sh > /etc/passwd
chmod 755 /etc/passwd
passwd
|
Create bootscript
1 | mkimage -A arm -C none -T script -d boot.cmd boot.scr
|
Framebuffer tips
http:///Display#Framebuffer_tips
|