版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,U-BOOT移植,经典2410开发平台基本硬件电路,UART,网卡,NAND,SDRAM,S3C2410,JTAG,Bootloader的概念,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特
2、定的Boot Loader 设计与实现。,Bootloader的概念,Bootloader是一段可执行程序,完成的主要功能是将可执行文件(一般是操作系统)搬移到内存中,然后将控制权交给这段可执行文件(操作系统)。,cpu,loader,Bootloader的工作模式(一),下载模式 对研发人员来说,Bootloader一般需要工作在这种模式下,特别是调试内核或者Bootloader本身的时候。 通过串口终端与Bootloader进行交互,可以操作系统硬件。比如通过网口或者串口下载内核,烧写Flash等等。,Bootloader的工作模式(二),启动加载模式 嵌入式产品发布的时候,Bootloa
3、der必须工作在该模式下。 这种情况下,Bootloader必须完成硬件自检、配置,并从Flash中将内核拷贝到SDRAM中,并跳转到内核入口,实现自启动,而不需要人为的干预。,Bootloader的安装媒介,系统上电时或复位以后,都从芯片厂商预先安排的一个地址处取第一条指令执行(对我们的S3C2410芯片,从0 x0处开始)。 由于上电或复位需要运行的第一段程序就是Bootloader,故必须把Bootloader放入该地址。将Bootloader写入固态存储设备,永久保存,系统上电后将自动执行Bootloader。,Bootloader的烧写,Bootloader可以配置系统。 没有Boo
4、tloader,系统就不能启动。 Bootloader可以实现自烧写。但是系统中没有还没有Bootloader的时候,怎么启动? JTAG烧写。,典型的Flash存储空间分配图,bootloader,启动参数,内核,根文件系统,嵌入式系统中常见的Bootloader,Vivi Blob Redboot U-Boot(armboot、ppcboot整合),U-Boot简介,1999年由德国DENX软件工程中心的Wolfgang Denk发起,全称Universal Bootloader。 特点: 支持多种硬件构架:包括ARM、x86、PPC、MIPS、m68k、NIOS、Blackfin 支持多
5、种操作系统:包括Linux、VxWorks、NETBSD、QNX、RTEMS、ARTOS、LynxOS 支持多达216种以上的开发板 开放源代码,遵循GPL条款 易于移植、调试 官方网站:http:/www.denx.de/wiki/U-Boot/WebHome,U-Boot目录结构,board 目标板相关文件,主要包含硬件初始化、SDRAM初始化 common 独立于处理器体系结构的通用代码 cpu 与处理器相关的文件,包含cpu初始化、串口初始化、中断初始化等代码 doc U-Boot的说明文档 drivers 设备驱动代码,如Flash驱动、网卡驱动、串口驱动等 fs U-Boot支持的
6、文件系统的实现,如cramfs、fat、ext2、jffs2等 include U-Boot使用的头文件,包括不同硬件构架的头文件 lib_xxx 处理器相关文件,如我们要使用的lib_arm,与arm体系结构相关的文件 net 网络功能的上层文件,实现各种协议,如nfs、tftp、arp等,U-Boot启动流程,和大多数的Bootloader一样,U-BOOT的启动分为两个阶段: stage1:依赖于CPU体系结构的代码,主要用汇编来实现。 stage2:通常用C语言来实现,这样可以实现复杂的功能,而且具有更好的可读性和可移植性。,U-Boot启动流程之stage1,第一阶段的代码位于cpu
7、/arm920t/start.S中,依次完成以下功能: 1、系统上电,进入svc模式 2、关闭看门狗,禁止所有中断 3、进行初级硬件初始化 4、将自身代码拷贝到SDRAM中 5、设置堆栈 6、清空bss段 7、跳转到C语言实现的stage2中,U-Boot的使用(1/3),1、printenv 打印环境变量 打印U-Boot的环境变量,包括串口波特率、ip地址、mac地址、内核启动参数、服务器ip地址等等。 2、setenv 设置环境变量 对环境变量的值进行设置,保存在SDRAM中,但不写入Flash。这样系统掉电以后设置的环境变量就不存在了。 3、saveenv 保存环境变量 将环境变量写入
8、Flash,永久保存。掉电以后不消失。,U-Boot的使用(2/3),4、ping 测试网络命令 ping命令用于测试目标板的网络是否通畅。 格式:ping + ipaddr 5、tftp 通过tftp协议下载文件至SDRAM 将tftp服务器上的文件下载到指定的地址,速度快。 格式:tftp + 存放地址 + 文件名 6、loadb 通过串口下载二进制文件 在目标板不具备网络功能的时候,可以配合超级终端下载二进制文件至内存中。缺点是速度慢。 格式:loadb + 存放地址,U-Boot的使用(3/3),7、bootm 引导内核 先将内核下载到SDRAM中(通过tftp命令或者loadb命令)
9、,然后执行bootm命令引导内核。 格式:bootm + 内核地址 8、help或者? 查看U-Boot支持的命令及其作用。,内核镜像的制作,mkimage A arm T kernel C none O linux a 0 x30008000 e 0 x30008040 d zImage n linux-2.6.24 uImage -A arm 目标平台是ARM构架的-T kernel 要处理的是内核 -C none 不采用任何压缩方式-O linux 要处理的Linux内核 -a 0 x30008000 加载地址,包括mkimage工具给内核添加的头信息 -e 0 x30008040 真正
10、的内核入口地址,除掉mkimage添加的0 x40长度的 头信息 -d zImage 使用的源文件是编译Linux内核得到的zImage -n linux-2.6.24 生成的内核镜像的名字 uImage 生成的供U-Boot启动的二进制内核镜像,LINUX内核移植,Linux介绍,桌面版本: 面向PC用户的桌面发行版本,常见的如 redhat、fedora、debian、Ubuntu、SUSE、红旗等。,Linux内核 内核是所有linux系统的中心软件组件。嵌入式领域所说的linux,一般是指linux内核。移植也是指的移植linux内核到目标平台。,Linux操作系统的发展,Linux
11、之父:李纳斯托沃兹 (Linus Torvalds),Linux内核的版本号,2.6.24 其中,2是主版本号,6是次版本号,24是修订版本号。 如果次版本号是偶数,说明是稳定版本。 如果次版本号是奇数,则是开发版本。 我们一般使用稳定版本。,Linux内核源代码目录结构,arch 包含和硬件体系结构相关的代码,每种平台占一个相应 的目录。如arm、avr32、blackfin、mips等。arch 目录在系统移植过程中是需要重点修改的部分 block 块设备驱动程序的IO调度。 crypto 常用的加密和离散算法,还有一些压缩和CRC校验算法,Linux内核源代码目录结构,drivers d
12、rivers 目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,如block、char、mtd、net、usb、video等等,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。该目录占用了整个内核发行版本代码的一半以上,其中有些驱动程序是与硬件平台相关的,有些是与硬件平台无关,例如字符设备、块设备、串口、USB 以及LCD 显示驱动等。,Linux内核源代码目录结构,Documentation 内核的说明文档。 fs 该目录下列出了Linux 支持的所有文件系统。目前Linux 已经支持包括JFFS2、YAFFS、ext3 和NFS 在内的多种文件系统,其中J
13、FFS2 常用于嵌入式系统NOR Flash 中的文件系统,YAFFS 常用于NAND Flash 中的文件系统,ext3 常用于台式PC 机的Linux 操作系统中的文件系统。还有一些伪文件系统,例如proc 文件系统,可以以伪文件的形式提供其他信息(例如,在proc 的情况下是提供内核的内部变量和数据结构)。虽然在底层并没有实际的存储设备与这些文件系统相对应,但是进程可以像有实际存储设备一样处理。,Linux内核源代码目录结构,include 头文件。与系统相关的头文件放在include/linux下, 与ARM体系结构相关的头文件放在include/asm-arm下。 init 内核初始
14、化代码。init 目录包含核心的初始化代码(不是系统的引导代码),有main.c 和Version.c 两个文件。这 是研究核心如何工作的好起点。 ipc 进程间通信代码。,Linux内核源代码目录结构,kernel 内核的核心代码,包括进程调度、定时器等。和arm平 台相关的核心代码在arch/arm/kernel目录下。 lib lib 目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/ lib/目录下。Lib/inflate.c 中的函数能够在系统启动时展开经过压缩的内核。Lib 目录下剩余的其他文件实现一个标准C 库的有用子集,主要集中在字符串和内存操作的函数(str
15、len、memcpy 和其他类似的函数)及有关sprintf 和atoi 的系列函数上。,Linux内核源代码目录结构,mm 内存管理代码,和arm平台相关的内存管理代码在arch/arm/mm目录下。 net 网络相关的代码,实现了各种常见的网络协议。例如TCP/IP、IPX 等。 scripts scripts 目录下没有代码,包含用于配置核心的脚本文件。当运行make menuconfig 或make xconfig 之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。 sound 音频设备驱动的通用代码和硬件驱动代码都在这个文件下面。,Linux内核启动方案,Linux内核
16、有两种映像: 非压缩内核Image 压缩内核zImage 嵌入式系统存储容量有限,因此通常选择压缩内核zImage.要使用压缩内核zImage,需要在映像开头加入解压缩代码,将zImage解压后,才可以执行。,zImage的构成,内核编译完成后,会在arch/arm/boot目录下 生成zImage文件。 zImage文件的组成: pggy.o:压缩后的内核文件 head.o:系统初级初始化代码文件 misc.o:解压缩代码文件,Linux内核的配置(1/6),.config文件 这是linux编译时所依赖的文件。我们在配置内核时所做的任何修改,最终都会在这个文件中体现出来。它是Makefil
17、e对内核进行处理的重要依据。 一般来说,内核提供了芯片公司demo板的.config文件,我们一般找一个近似的进行修改。如S3C2410平台上可以选择s3c2410_deconfig这个文件。,Linux内核的配置(2/6),三种配置方式 make config 基于文本对话的配置方式,比较细致,但是浪费时间。对专业的内核开发人员比较合适。 make xconfig 基于图形界面的配置方式。非常直观,但是需要特殊的软件支持,一般不推荐。 make menuconfig 推荐的内核配置方式,采用目录的方式,直观,容易使用。,Linux内核的配置(3/6),关于Kconfig 在进行make me
18、nuconfig时,目录的生成依赖于Kconfig文件。一般来说,每个源代码目录下都有一个Kconfig文件。 config DM9000 tristate DM9000 support depends on ARM | BLACKFIN | MIPS select CRC32 select MII -help- Support for DM9000 chipset. To compile this driver as a module, choose M here. The module will be called dm9000.,Linux内核的配置(4/6),Kconfig对.conf
19、ig文件的影响: CONFIG_DM9000=y make menuconfig对内核配置所做的修改最终反应在.config文件中。如上所示,在.config文件中CONFIG_DM9000=y被定义为y。,Linux内核的配置(5/6),Kconfig对Makefile的影响: . obj-$(CONFIG_DM9000) += dm9000.o CONFIG_DM9000是tristate类型,有三个可能取值: y:编译进内核 m:编译成模块 n:不进行编译 若是bool类型,则只有两种可能,y或者n。,Linux内核的配置(6/6),关于Makefile Linux内核源码的每个目录下都
20、有一个Makefile,由该 Makefile对源代码的编译、链接等操作进行控制。 编译完成后,每个源代码目录下都会生成一个名叫 built-in.o的文件。这个文件由源代码目录下的所有源文件编译后的目标文件链接而成;而不同的built-in.o又被上层目录中的Makefile链接成更大的builtin.o,直到最后链接成为一个内核vmlinux.o。,用U-Boot启动Linux内核,1、下载u-boot.bin到SDRAM的0 x30008000处 tftp 0 x30008000 uImage 2、启动内核 bootm 0 x30008000,LINUX文件系统,Linux文件系统简介,
21、在Unix业界有一句话叫做“一切皆文件”,这是对Linux文件系统的一个很好抽象。 我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件。 而Windows中,我们则可以极端地认为“一切皆设备”,常用的文件系统,第二代扩展文件系统(EXT2),ext2fs由ReyCard设计,其目标是为Linux提供一个强大的可扩展文件系统 支持标准unix 文件类型 管理大的分区,达4TB 支持长文件名,255字符 为超级用户保留5%数据块,基于FLASH的文件系统,Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为
22、0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。 闪存主要有NOR和NAND两种技术。Flash的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。 在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系
23、统都是基于MTD驱动层的。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。,Jffs2,Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2) JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCL
24、inux中。 主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。 目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。 jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件
25、结构,对于大容量的NAND闪存会耗费大量时间。,yaffs:Yet Another Flash File System,yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。 yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与M
26、TD驱动程序配合使用。 yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。,CRAMFS,由Linus Torvalds 参与开发的小型只读压缩文件系统 Inode、文件名称和目录信息不压缩 单个文件最大为16MB 数据压缩存放 适合不需要写、且体积较大的文件系统,如/lib,/opt等 与JFFS2、Cloop相比,读取速度快 压缩率可以超过50 读取文件时,每次读取4k内容,解压缩到cache中 Linux内核已提供了对cramfs的支持,只要编译时选中 创建文件系统(生成image文件) #mkcramfs /lib lib.cramfs #mkcramfs /usr usr.cramfs 挂载文件系统 #mount t cramfs lib.cramfs /lib o loop #m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商砼终止合同协议
- 政府垫资合同范本
- 学校化妆协议合同
- 标识标牌合同协议
- 林地转租合同范本
- 景观劳务合同范本
- 柑桔购销合同协议
- 报建文本合同范本
- 校长劳动合同范本
- 景区物业合同范本
- 玉米质押合同范本
- 《11845丨中国法律史(统设课)》机考题库
- 2026年日历表含农历(2026年12个月日历-每月一张A4可打印)
- 节能基本情况表(打印)
- 创新思维与创业实验-东南大学中国大学mooc课后章节答案期末考试题库2023年
- 电动车转让合同协议书电子版
- YS/T 1019-2015氯化铷
- GB/T 39081-2020电阻点焊及凸焊接头的十字拉伸试验方法
- GB/T 25390-2010风力发电机组球墨铸铁件
- GA 38-2021银行安全防范要求
- Mill准则-吉林大学课程中心课件
评论
0/150
提交评论