关于uboot和kernel的一些理解
经过多次的修改和实验,终于能够在mini2440开发板上进行各种uboot和kernel的挂载实验了,在此期间学习到了很多知识,也理解了一些知识
1->分区
uboot和kernel的分区表要一致
uboot分区位置:include/configs/mini2440.h
#define MTDIDS_DEFAULT "nand0=nandflash0"
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k(bootloader)," \
"128k(params)," \
"5m(kernel)," \
"-(root)"
kernel分区位置:arch/arm/mach-s3c2440/mach-mini2440.c
static struct mtd_partition friendly_arm_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00040000, /* 256k */
.offset = 0,
},
[1] = {
.name = "param",
.offset = 0x00040000,
.size = 0x00020000, /* 128k */
},
[2] = {
.name = "Kernel",
.offset = 0x00060000, /* 512k */
.size = 0x00500000,
},
[3] = {
.name = "root",
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand",
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};
uboot和kernel的分区size一定要相吻合(当然可以随意设置,只要相符即可),不然,在starting kernel时会导致启动不了的错误.
2->内核参数的偏移量
#define CONFIG_ENV_OFFSET 0X60000 /* uboot参数偏移 */
#define CONFIG_ENV_SIZE 0x20000 /* 大小128k,Total Size of Environment Sector */
这个地方很容易被忽略掉,如果此处的设置与uboot以及kernel的分区不一致,也会导致内核启动不了(多数是参数被uboot或kernel覆盖了),一定要注意!!!
3->nfs服务
服务端:防火墙关闭<service iptables stop>,重新绑定rpc服务<service rpcbind restart>,mount nfs服务,最后重启nfs<service nfs restart>
客户端:<mount -t nfs -o nolock 服务端地址:/服务端目录 /开发板挂载目录>
kernel:make menuconfig时要选中开发板支持nfs client
4->nfs挂载kernel和rootfs
将uboot烧写好后,直接用<nfs 30008000 服务端ip:/uImage服务端目录>挂载内核,然后<bootm>启动;启动成功后,可以用nand命令将内核写入到nand中;也可以通过修改bootargs参数来自动挂载根文件系统;参数设置如下:<setenv bootargs "noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=服务端ip:rootfs目录 ip=开发板ip:服务端ip:网关:掩码::eth0:off">
5->kernel的入口和装载地址
大家知道可以使用<mkimage -n 'mini2440' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage>来制作uImage(因为uboot只能识别用mkimage制作好的内核镜像,只因为该镜像头部多了64字节的内核信息),网上流传了很多关于mini2440的入口地址和装载地址的区别,但貌似我没遇到过这样的问题,直接在30008000装载30008040地址的内核镜像,所以流传归流传,正确与否还是要依靠自己去多多做实验,否则就只能是镜中花水中月.
6->小结
调试uboot和kernel不可能一次就成功,失败的越多,那么你就距离成功越近,对arm-linux的理解就越深刻,我自己就失败了很多次,遇到过各种各样的问题,每次查找资料解决后,都会将过程记录在文本文件中,我觉得这是一个很好的学习方式.加油吧!!!
关于uboot和kernel的一些理解的更多相关文章
- 4412开发板搭建Uboot、Kernel和Android4.0的编译环境方法
本文转自迅为4412开发板实战教程书籍:http://www.topeetboard.com 迅为是基于Ubuntu12.04.2平台做开发,所有的配置和编译脚本也是基于此平台,没有在其它平台上测试过 ...
- S5PV210之Sate210-F DIY硬件,移植uboot,kernel,android 活动现在已经进入实施阶段吗,欢迎广大网友参与 !
大家一起来diy 超低价四核的exynos4412或者Cortex A8S5pv210开源开发板 商业版Sate210已经完成了好久了.Sate4412 也已经出来.但是这两个接口非常全,主要是针对企 ...
- 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)
Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM: 128 MiBCheck spi flash c ...
- 嵌入式 uboot引导kernel,kernel引导fs
1.uboot引导kernel: u-boot中有个bootm命令,它可以引导内存中的应用程序映像(Kernel),bootm命令对应 common/cmd_bootm.c中的do_bootm()函数 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
- 嵌入式系统烧写uboot/bootloader/kernel的一般方法
嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误, ...
- 引用 U-boot给kernel传参数和kernel读取参数—struct tag
引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】
转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...
- 02.将uboot,kernel,rootfs下载到开发板上
转载,侵删 将uboot,kernel,rootfs下载到开发板上 1.为什么要下载 所谓下载,也称烧录,部署. 1.1.什么是u-boot Hi3518EV200 单板的 Bootloader 采用 ...
随机推荐
- Grunt一辈子的好基友:yeoman
yeoman是什么 yeoman主要包含了三个工具:yo.grunt.bower.我们先看下这三个工具分别是做什么的: yo:脚手架工具,主要作用是创建项目骨架(跟grunt-init有点像). gr ...
- shell脚本 空格
1.定义变量时, =号的两边不可以留空格. eg: gender=femal----right gender =femal---–wrong gender= femal---–wrong 2.条件测试 ...
- python: jquery实现全选 反选 取消
引入这个jquery-1.12.4.js jquery实现全选 反选 取消 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...
- 【转】Struts1.x系列教程(4):标签库概述与安装
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- Android 网络框架 volley源码剖析
转载请注明出处: http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了, ...
- HTML 事件属性(下)
HTML 事件属性(下) 一:键盘事件 (Keyboard Events)二:鼠标事件 (Mouse Events) 一:键盘事件 (Keyboard Events)在下列元素中无效:base.bdo ...
- Ubuntu 14.04下安装功能强大的屏幕截图软件 Shutter
[注释]试用了一下,果然很强大,牛逼 一款功能强大的屏幕截图软件——Shutter,Shutter最基本的就是截图功能了,在设计上可以自由选定区域,同时选定之 后依然可以通过上下左右四个地方来改变选区 ...
- js 获取iframe中的元素
今天要修改编辑器插件中的元素遇到的问题 jquery 在父窗口中获取iframe中的元素 1.Js代码 格式:$("#iframe的ID").contents().find(&qu ...
- SQL语言增加、修改、删除数据的语法
增加 insert into 表名(字段1,字段2) values ('字段1的值','字段2的值'); 修改 update 表名 set 字段1='赋予字段1的新值',字段2='赋予字段2的新值' ...
- JQuery中的id选择器含有特殊字符时,不能选中dom元素
1.jquery类库在我们实际项目中用的很多,大家经常需要根据控件的id,获取对应的html元素.但是:当id含有特殊字符的时候,是不能选中的 2.jquery的id选择器只支持,单词.阿拉伯数字.下 ...