分享

semlanik's corner | Step

 dwlinux_gs 2014-12-30

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多