《嵌入式驱动(一):系统移植》
系统移植
一、Linux系统移植需要的文件
1.uboot
一段逻辑代码,主要完成两个功能:
初始化硬件外设
加载内核
2.zImage
一个软件,主要完成如下5打功能:
内存管理
任务管理
多任务间的通信
网络管理
文件系统管理
3.dtb
与内核搭配使用的一个包含硬件信息的文件,称为设备树文件
4.rootfs
文件系统,与用户实现交互
shell命令
库文件
文件的管理(Linux系统一切皆是文件,可以实现对设备的操作和内核信息的查看)
二、IMX6ull SOC资源
IMX6uLL-Mini平台分为:核心板(系统启动必须具备的资源)和底板(外设资源)
核心板:
IMX6uLL芯片
32K ICache 指令缓存
32K DCache 数据缓存
128K L2Cache 指令和数据缓存
128K SRAM 在初始化DDR之前可以使用的不需要初始化的一段内存空间
96k BotROM 厂家固化的启动代码
DDR 512M
内存,掉电数据丢失,读写速度快
EMMC 8GEMMC分为EMMC0和EMMC1,其中一个为核心板上的8GEMMC芯片、另一个为底板的SD卡
(32G)的EMMC
三、IMX6uLL启动方式
启动方式:
USB启动:驱动后,需要通过PC将系统文件通过USB传输给开发板完成启动在硬件平台没有系统的情况下,第一次启动使用USB启动
SD卡启动:将系统烧录到SD卡上,由SD卡启动平台代码开发调试时,或者检测硬件平台好坏的时候,使用SD卡
EMMC启动:将系统烧录到EMMC上,由EMMC启动平台代码随开发板完成自启动,使用EMMC
NAND(无法实现):将系统烧录到Nand Flash上,由Nand Flash启动
四、烧录方法
1. Windows烧录到 SD卡上
mfgtool NXP
2. Widows烧录到EMMC上
3. Ubuntu烧录到SD卡上
4. Ubuntu烧录到EMMC上
5. tftp + nfs网络启动
五、IMX6uLL启动流程
1. 上电启动,执行0x0处的代码(中断向量表 -> 复位异常 -> 跳转到对应函数实现启动)
2. 执行IMX6ull内部的96k的BotROM代码
完成对CPU信息校验
查看启动方式
根据启动方式寻找可执行代码(IVT + BOOT DATA[uboot.bin] + DCD [DDR寄存器信息])
BotROM代码会找到DCD并对DDR实现初始化
将uboot.bin拷贝到DDR中运行
3. uboot
重新设置中断向量表的位置(协处理器 CP15)
初始化硬件外设
串口
网口
EMMC
加载引导内核启动
uboot会实现自搬移,为内核腾出来内存空间
在EMMC上寻找zImage和DTB文件(或者利用tftp从服务器下载),并加载到DDR中
通过bootz命令来启动内核zImage
uboot将文件系统相关的参数 bootargs 写入到设备树的choosen节点中
uboot向内存传参:r0 固定值 r1 CPU ID号 r2 设备树内存地址
内核根据设备树信息重新初始化外设
内核会找到choosen节点查找文件系统所在位置
内核引导启动文件系统中的内核进程进程 fork + exec启动其余所有进程任务
其中有一个进程shell终端
系统启动完成进入人机交互的界面
六、uboot
uboot的功能:
初始化硬件外设
引导启动内核
uboot工作流程:
初始化i2c、DDR、EMMC、Serial、Net
进入人机交互环节
用户输入回车进入uboot系统,可以输入命令与uboot交互
用户不输入回车,uboot会执行bootcmd
重点
1. Linux系统移植都需要哪些文件?每个文件的作用?
2. Linux系统的启动流程?
3. uboot中bootcmd和bootargs的含义?