ARM嵌入式设备的启动流程分析概述
来源:互联网 发布:中国软件重组预期 编辑:程序博客网 时间:2024/05/22 12:43
题目写的比较大,讲讲我的体会吧:
首先uboot 分两份,前半部分成为垫脚石,用来搬运后半部分到指定的RAM中去执行。这些如果比较好奇,那就去百度吧,懒得写。
bootargs=noinitrd console=ttyS0,115200 root=/dev/nfs nfsroot=129.1.5.109:/home/collector/nuc970bsp/rootfs_48 bootm 0x7FC0 ip=129.1.5.107:129.1.5.109:129.1.5.109:255.255.255.0 rdinit=/sbin/init mem=64M; bootcmd=tftp 0x7FC0
然后这个配置里面告诉了 init进程启动的console 还有 rootfs的路径还有类型,还有这个内核的镜像的搬移位置是0x7FC0,当然这个不是执行位置,因为咱们用makimage工具生成的前面还有一个头呢。
uboot知道从哪里去找kernel呢?在上面这里给出的是通过tftp的方式传输到0x7FC0位置的然后启动。如果我想要从flash中启动呢?我们看
nboot 0x7FC0 0 0x200000 ;bootm 0c7fc0
看到没,是不是很简单,我直接从flash 0x200000的位置使用nboot搬移过来就可以了.
现在是不是好奇,如果我不是用nfs呢,我用的是yaffs直接烧录到flash中呢。这个也简单我继续贴。
这里面也包含了root路径还有 类型
如果是ubi 呢?好嘛我继续贴
看到没都是大同小异的东西。只要把这个写到uboot环境变量中就好使。就能传给内核。告诉 我根文件系统的启动位置。
有点乱,但是我讲明白了一个问题。uboot从哪里找到kernel,kernl从哪里找到rootfs.那么现在还是存在一个问题,rootfs从哪里找到我们的应用层数据呢?莫慌,先补充一个知识。
文件系统映像文件的定义:就是将一个目录下的内容按照一定的格式放到一个文件中,这个文件可以直接烧录在存储设备上去。当系统启动后挂载这个文件,然后我们就可以在挂载点上看到该目录中的原来的内容。
看完这个定义,大家就明白了吧。我们的应用层文件可以搞成一个文件系统文件然后烧进flash中去。我们烧到一个mtd分区之后,然后通过mount -t 把他挂载到一个rootfs分区的下面不就搞定了么。举个例子,比如我们吧应用层程序制作成yaffs镜像,然后烧录到flash的mtdbolock1分区。rootfs起来之后,我们在rcS脚本中使用,mount -t jffs2 /dev/mtdblock1 /mnt/data就可以了!!!这样做还带来了一个好处,我们可以在系统完全起来之后,通过tftp 向/mnt/data 存文件,就直接能干到mtdblok1分区里面,惊不惊悚,神不神奇!!!写到这里我感觉还是不满足,这个mtd是什么时候分配的flash,有什么办法?
baudrate=115200
bootargs=console=ttyS0,115200n8 root=/dev/ram0 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(u-boot),0x1000000@0x200000(kernel_ramfs),-(usrdata) nandboot
bootcmd=udkernel ; nboot 0x7FC0 0 0x200000 ;bootm
bootdelay=3
ethact=emac
ethaddr=00:00:fc:63:66:88
gatewayip=129.1.88.1
ipaddr=129.1.22.99
mtddevname=u-boot
mtddevnum=0
mtdids=nand0=nand0
netmask=255.255.0.0
serverip=129.1.4.96
stderr=serial
stdin=serial
stdout=serial1
找到mtdparts了没?就是这么搞。或者你再linux 内核里面配置也是可以的。问题又来了,你这直挂了一个yaffs,不足以满足 我的好奇心,现在ubi文件系统用的那么火,展示一下怎么挂载ubi,好的
#attach mtd2 to be ubi volume ubiattach /dev/ubi_ctrl -m 2 #make ubi1 size=80MiB dynamic ubimkvol /dev/ubi0 -N usrdata -s 83886080 -t dynamic #mount ubit ---> /mnt/data mount -t ubifs ubi0_0 /mnt/data
http://blog.csdn.net/liuzijiang1123/article/details/49559607
贴上个链接。其实看完这个之后你更应该产生一个疑惑,这个ubi0_0跟ubi1_0是什么鬼。
看了这个图就明白了吧。
这样, 咱们就从uboot kernel rootfs userdata 这所有的关联起来了。咦,有人又冒出来了说你的0xfc07是哪里来的?奥这个是内核里面有的,就是指定了你这个kernel运行的位置。然后这个位置再加上那个mkimage头,加完了正好你就得把这个image搬运到0x7fc0位置。这东西,在正常的芯片开发手册都会告诉你,不然你去查看kernel源码,当然,我也搜过,现在忘记在哪个文件里了。不同的芯片这个默认参数还不一样。当然你说可以去改动这个配置的。姑且没什么意义不说,还容易出问题咋办。稀里糊涂的就到这儿吧。
- ARM嵌入式设备的启动流程分析概述
- 基于ARM的嵌入式系统Bootloader启动流程分析(S3C44B0X)
- 基于ARM的嵌入式系统Bootloader启动流程分析----- 转!!
- 基于ARM的嵌入式系统Bootloader启动流程分析
- Android -- Android设备的启动流程概述
- ARM+Linux系统启动流程分析----ARM处理器的启动流程
- 基于ARM的嵌入式系统Bootloader启动流程分析[转自http://blog.ednchina.com/darkbluexn/11951/message.aspx#]
- LIUNX ARM 启动流程分析
- ARM处理器启动流程分析
- arm处理器启动流程分析
- arm linux 启动流程分析
- 有关ARM启动流程分析
- 嵌入式Linux启动流程分析
- 嵌入式Linux启动流程分析
- 嵌入式Linux启动流程分析
- ARM的启动流程
- PC机和嵌入式设备启动流程
- 关于ARM启动流程的分析(NandFlash Or NorFlash)
- 第8周 项目3- 对称矩阵压缩存储的实现与应用(1)
- Leetcode009 Palindrome Number
- C/C++ 第八周串和数组 (一)顺序串算法 项目2—(四)
- linux进程间通信方式之信号处理signal
- SparkML之PCA主成分分析
- ARM嵌入式设备的启动流程分析概述
- 算法复杂度的分析——时间复杂度和空间复杂度
- CSS伪类
- dedecms织梦cms被挂马 /plus/90sec.php 的修复问题
- 一些基本的排序算法(正在修改)
- tomcat中文乱码问题
- 延时加载
- ELDD读书笔记:第三章 内核组件
- ssm maven oracle各路大神的博文