主题 : 移植uboot,文件系统以及内核汇总 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 9687
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2009-10-10
最后登录: 2012-05-30
楼主  发表于: 2010-12-13 16:25

 移植uboot,文件系统以及内核汇总

我这个人比较懒,不会去刻意钻研什么,以前一直是使用友善提供的supervivi的,觉得挺好,但是最近我们的项目上的一个板子和开发板连起来的时候,从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
然后重启就一切搞定了
上面就是我做的所有步骤,其实挺简单的,但是这些简单都是拜像tekkman等大牛的辛勤付出所赐,在此一并谢过。希望对大家能有所帮助。
级别: 新手上路
UID: 31015
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2010-10-25
最后登录: 2015-07-02
1楼  发表于: 2011-01-26 10:23
就是把arch/arm/mach-s3c2440/mach-mini2440.c中的分区改一下就好了,对照uboot,改法如下:
supervivi  改成0x000000~0x60000
param 改成0x60000~0x80000
kernel改成0x80000~0x580000
root改成0x580000~最后,超过貌似也没关系


能够把上面这段修改后的代码贴出来吗?万分感谢!!
级别: 新手上路
UID: 30571
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2010-10-18
最后登录: 2012-04-16
2楼  发表于: 2011-04-14 09:51
同楼上,希望楼主能解答一下!
级别: 新手上路
UID: 45328
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2011-05-04
最后登录: 2017-09-13
3楼  发表于: 2011-05-04 10:14
很好的东西,试试
执着
级别: 新手上路
UID: 46796
精华: 0
发帖: 13
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2011-05-16
最后登录: 2011-09-25
4楼  发表于: 2011-05-16 18:35
学习了
忘记了思念的负担~
级别: 侠客
UID: 43227
精华: 0
发帖: 81
金钱: 410 两
威望: 82 点
贡献值: 0 点
综合积分: 162 分
注册时间: 2011-04-14
最后登录: 2013-02-21
5楼  发表于: 2011-11-03 21:33
uboot没有分区概念吧,什么意思呢