最近项目上的一个板子和开发板连起来的时候,从nandflash启动也会进入从norflash启动一样的界面,这样需要按下“B"才能进入,没办法,只能换个思路,前几天开始搞uboot。先说下我板子和软件的情况:
1.128M的nandflash和2M的norflash,64M的ram
2. linux版本是友善提供的2.6.32,mkyaffs2image(因为我是128M的flash,好像需要什么2k对齐,所以要用那个mkyaffs2image-128M反正都是友善提供的)
3.u-boot是当然是tekkaman Ninja大牛的uboot了,下载地址https://github.com/tekkamanninja/U-boot-2009.11_tekkaman,把交叉编译器换成友善提供的arm-linux-直接make disclean; make mini2440_config;make后用supervivi下载到nandflash中就能用了
然后你需要先设置好nfs,因为这样便于下载和测试,来检测你的内核和文件系统到底是不是能用的(设置过程就略去了,网上很多)
接下来是一直内核,内核开始我也用的是友善提供的做好的镜像,后来发现分区和uboot不一致,所以自己又改了一下,改法很简单,就是把arch/arm/mach-s3c2440/mach-mini2440.c中的分区改一下就好了,对照uboot,改法如下:
supervivi 改成0x000000~0x60000
param 改成0x60000~0x80000
kernel改成0x80000~0x580000
root改成0x580000~最后,超过貌似也没关系
然后用手册上告诉的方法生成内核,再使用tekkman大牛的uboot目录下的tools目录下的mkimage把内核镜像制作成uImage.img
制作方法是mkimage -n 'linux-2.6.32' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage.img
上面那个0x30008040 我也不知道为啥,前面我用的是0x30008000就出现了data abort,改完就没有了
然后你可以直接下载到ram中,也可以通过nfs加载内核,反正就是修改bootcmd,因为这一步错误的可能性较低,所以我就选择了直接下载:
nfs 0x30008000 192.168.0.3:/opt/nfs/uImage.img
nand erase 0x80000 300000
nand write 30008000 0x80000 300000
set bootcmd 'nand read 30008000 0x80000 300000;bootm 30008000'
saveenv
重启,不要按任何东西应该就能进入内核了,现在还没有文件系统,当然还会出现panic啥啥啥的东西
接下来就是一直文件系统,友善提供的内核好像是直接支持yaffs2的,所以高枕无忧,下面也不难,什么busybox我也没用到,就是用友善提供的root_qtopia文件夹做的。你可以先利用nfs做一下测试,看看这个root_qtopia能不能用,方法就是把它复制到nfs电脑中的nfs文件夹下,然后修改uboot中的bootargs,tekkman大牛的这个bootargs本来就是nfs的,你可以printenv bootargs看看他怎么设置的,对应改一改就行了,然后启动,应该一切正常了。接下去就是把文件系统下载到nandflash中了,就是用那个mkyaffs2image-128M把root_qtopia文件夹制作成rootfs.yaffs2,然后再使用nfs下载到nandflash中:
nfs 0x30008000 192.168.0.3:/opt/nfs/rootfs.yaffs2
nand erase 0x580000 7a80000
nand write 30008000 0x580000 你的yaffs2文件的大小(在nfs下载的时候有说出来的)
set bootargs 'noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M'
saveenv
然后重启就一切搞定了 |