A20网络机顶盒移植4.5内核+U-Boot+rootfs
没什么时间,来慢慢更
这里我的机器是“灵云Q3”,100来块钱,全志A20双核,512M内存,支持TF卡,8GNand……
一、先来把需要用的东西下载好。
U-boot:
git://git.denx.de/u-boot.git
kernel:
git://github.com/torvalds/linux.git
工具链:
https://releases.linaro.org/components/toolchain/binaries/latest-5.1/arm-linux-gnueabihf/gcc-linaro-5.1-2015.08-x86_64_arm-linux-gnueabihf.tar.xz
imgrepacker:
http://forum.xda-developers.com/showthread.php?t=1753473
二、再把需要用的东西准备好。
三、编译U-boot。这里我是把所有东西放到TF卡里启动的。新内核都是使用Dtb的启动方式,所以要准备好Q3用的Dts。一般来说移植是先把相近板子的Dts拿过来改,这里我选择的cubietruck的Dts。所有Dts在内核arch/arm/boot/dts目录下,cubietruck的Dts名字叫sun7i-a20-cubietruck.dts,把它复制过来改名字为sun7i-a20-lingyunq3.dts,当然里面的也最改掉cubietruck。
把由于没有具体的原理图,只能拿原来的厂家的升级固件,用imgrepacker来解包寻找答案。
升级包包名字:sun7i_android_rainbowbox.img。
解包命令:$ ./imgrepacker sun7i_android_rainbowbox.img
然后就可以得到一堆fex的文件,其中sys_config.fex就是我需要的文件了,里面记录了所有驱动用到的IO口。根据它来修改Dts文件。
0.进入U-boot目录
1.清理
$ make distclean
2.复制
$ cd configs/
$ cp Cubietruck_defconfig lingyunq3_defconfig
$ cd ../arch/arm/dts/
$ cp 修改好的dts sun7i-a20-lingyunq3.dts
3.修改
$ vim configs/lingyunq3_defconfig
改默认设备树
CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-lingyunq3"
根据sys_config.fex可知mmc0的cd脚接PD4
CONFIG_MMC0_CD_PIN="PD4"
4.编译
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make lingyunq3_defconfig
$ make all -j$(nproc)
5.安装
插入TF卡并找到它在/dev目录下的名字,这里的X就是
$ export card=/dev/sdX
清理:不保留TF卡分区表
$ dd if=/dev/zero of=${card} bs=1M count=1
保留分区表
$ dd if=/dev/zero of=${card} bs=1k count=1023 seek=1
写入TF卡
$ dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8