关于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 采用 ...
随机推荐
- call()\apply()\bind()备忘录
这几个玩意儿几乎看一次忘一次,每次用都要重新看一遍,还是理解的不够.本文对不做深入解释,只根据自己的理解对函数定义进行语义化说明. 1.call() fun.call(context,arg1,arg ...
- python核心编程学习记录之错误与异常
- sublime设置备份
Settings-user { "font_face": "Consolas", "font_size": 13, "line_p ...
- iOS 开发笔记-AFNetWorking https SSL认证
一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探 其实这么做的话还是不够的 . 我们还需要防止中间人攻击(不明白的自 ...
- bat 命令分行写
myprog parameter parameter parameter parameter parameter parameter parameter parameter parameter par ...
- IntelliJ IDEA中使用综合使用Maven和Struts2
在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...
- Codeforces 720A. Closing ceremony
A. Closing ceremony time limit per test 2 seconds memory limit per test 256 megabytes The closing ce ...
- REST 架构风格
目前基于网络应用的架构风格主要有三种: RPC架构风格 将服务器看作是由一些过程组成,客户端调用这些过程来执行特定的任务.SOAP就是RPC风格的一种架构.过程是动词性的(做某件事),因此RPC建 ...
- vs 2015 写php太爽了,毕竟我接触的第一款ide就是vs啊
- iOS - Xcode 插件
Xcode 插件 Xcode 插件安装目录: ~/library/Application Support/Developer/Shared/Xcode/Plug-ins Xcode 插件大全 http ...