返回学习汇总贴规避内核BUG,从tftp或nand加载内核,挂载nfsroot0.开始之前:
(1) 了解uImage格式及引导过程
(2) 分析bootm相关代码(image.h boot.h image.c uimage.c commands/bootm.c arch/arm/lib/bootm.c )
(3) 分析env相关代码,了解环境变量传递过程(env.c parameter.c globalvar.c bootargs.c armlinux.c env/bin/init env/bin/boot env/init/net ) (4)掌握
Barebox for tiny 210 - step 51.编译Barebox
(1) 更新源码到对应版本
cd ~/s5pv210/github/loader/barebox && git checkout 812926e11b37deba3b1ee2a4f246b393df741901
(2) 配置编译
cp arch/arm/configs/friendlyarm_tiny210_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
禁用General Settings -> [ ]run machine low-level init
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- && sudo cp barebox.bin /srv/tftp/
编译生成的barebox.bin放到tftp根目录下
2.编译内核
(1) 解压友善内核
(2) 修改内核,解决UART FIFO状态查询代码存在的BUG
--- arch/arm/mach-s5pv210/include/mach/uncompress.h.old 2013-04-10 21:59:24.065238578 +0800
+++ arch/arm/mach-s5pv210/include/mach/uncompress.h 2013-04-10 18:07:08.395060709 +0800
@@ -18,7 +18,12 @@
static void arch_detect_cpu(void)
{
- /* we do not need to do any cpu detection here at the moment. */
+ /*
+ * For preventing FIFO overrun or infinite loop of UART console,
+ * fifo_max should be the minimum fifo size of all of the UART channels
+ */
+ fifo_mask = S5PV210_UFSTAT_TXMASK;
+ fifo_max = 15 << S5PV210_UFSTAT_TXSHIFT;
}
(3) 配置编译
cp mini210_linux_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
禁用System Type ---> [ ]Force UART FIFO on during boot process 暂时规避开启UART FIFO时程序挂死的问题
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage && cp arch/arm/boot/uImage /srv/tftp/
编译生成的uImage放到tftp根目录下
3.安装配置NFS服务
(1) 解压友善根文件系统到NFS目录(/home/doudou/nfsroot/tiny210)
(2) 安装
sudo apt-get install nfs-kernel-server
(3) 配置
sudo vi /etc/exports (添加一行)
/home/doudou/nfsroot/tiny210 192.168.0.*(rw,sync,no_root_squash)
sudo /etc/init.d/portmap restart && sudo /etc/init.d/nfs-kernel-server restart
(4) 测试
sudo mount -t nfs 192.168.0.10:/home/doudou/nfsroot/tiny210 /mnt/nfs/ && sudo umount /mnt/nfs
4.网络启动
通过串口终端执行update命令,单板从TFTP下载barebox.bin到RAM并运行,倒数三秒后自动从服务器加载内核和根文件系统 ,成功进入图形界面
5.NAND启动
通过串口终端执行update命令,单板从TFTP下载barebox.bin到RAM并运行,三秒内按任意键中断autoboot,然后执行下述命令拷贝内核到NAND中
erase /dev/nand0.kernel && cp /mnt/tftp/uImage /dev/nand0.kernel
执行下述命令设置命令行参数
global linux.bootargs.dyn.root="root=/dev/nfs nfsroot=192.168.0.10:/home/doudou/nfsroot/tiny210 ip=192.168.0.100:192.168.0.10:192.168.1.1:255.255.255.0::eth0"
执行bootm /dev/nand0.kernel 命令从NAND启动内核,内核从服务器加载根文件系统,成功进入图形界面
6.
继续之前 分析/dev/nand0.kernel 分区的地址和大小
将rootfs烧写到NAND FLASH中
分析BOOTZ、BOOTU机制
分析修改的内核代码
[ 此帖被mei5150在2013-04-13 20:45重新编辑 ]