一.系统移植
系统移植:在IMX6ULL平台移植linux系统
驱动课程:在IMX6ULL平台linux操作系统中适配IMX6ULL外设资源
二.Linux系统移植
1.linux系统:操作系统的内核
shell的作用:保护内核,命令解释器
linux内核的任务:(1)内存管理MMU(2)任务管理(3)网络管理(4)任务间的通信(5)文件系统的管理
2.linux系统移植需要的文件列表
bootloader:(1)初始化硬件外设(2)加载引导启动内核(指定内核启动后寻找的文件系统及其路径)linux系统--->软件(一段代码)--->压缩--->zImage内核镜像
文件系统:提供一个与用户交互的系统结构(支持用户命令,用户安装软件,用户存储文件,用户查看系统信息,用户操作设备)
※三.系统移植的文件及其作用
1.uboot:
一段逻辑代码,主要完成两个功能:初始化硬件外设,加载内核
2.zImage:
一个软件,主要完成五个功能:内存管理,任务管理,进程间通信,网络通信,文件系统管理
3.dtb:
硬件设备的信息,与内核搭配使用的一个保存硬件设备信息的文件,称为设备树文件
4.rootfs:
人机交互系统,文件系统与用户实现交互:shell命令,库文件,文件的管理(linux系统一切皆文件,可以实现对设备操作和内核信息的查看)
四.IMX6ULL的Soc资源
IMX6ULL-Mini平台分为:核心板(系统启动必须具备的资源)和底板(外设资源)
核心板:(1)IMX6ULL芯片:32k Icache,32k Dcache,128k Lcache,128k SRAM(在初始化DDR之前可以使用的不需要初始化的一段内存空间),96k BotROM(厂家固化的代码)
(2)DDR(512M):内存,掉电数据丢失,读写速度快
(3)EMMC(8G):EMMC分为EMMC0和EMMC1,其中一个为核心板上的8GEMMC芯片,另一个为底板的SD卡(32G)的EMMC
内存和外存都需要初始化

内存特点:读写速度快,造价昂贵,掉电数据丢失
外存特点:读写速度慢,造价便宜,掉电数据不丢失
内存与CPU直接交互

都要进行初始化
五.IMX6ULL启动方式
(1)USB启动:在硬件平台没有系统的情况下,上电第一次启动,驱动后,需要通过PC将系统文件通过USB传输给开发板完成启动
(2)SD卡启动:将系统烧录到SD卡上,由SD卡启动,平台代码开发调试时,或者检测硬件平台好坏的时候使用SD卡
(3)EMMC启动:将系统烧录到EMMC上,由EMMC启动,平台代码随开发板完成自启动,使用EMMC
(4)NAND(无法实现):将系统烧录到Nand Flash上,由Nand Flash启动
桥接模式:Ubuntu和windows没有任何关系,直接使用网卡。windows和ubuntu是独立的IP地址,Ubuntu可以作为服务器
NAT模式:ubuntu作为windows下的一个软件开始用软件,windows有网,ubuntu就有网,Ubuntu的IP地址是虚拟出来的,不能作为服务器
※六.IMX6ULL启动流程

BotROM启动阶段:(1)上电启动,执行0x0处的代码(2)执行IMX6ULL,96K,BotROM代码(3)CPU自检,查看启动方式(4)查看imx数据(IVT+BOOTDATA+DCD)(5)初始化DDR(6)读取BOOTDATA(uboot.bin)放入DDR运行
uboot启动阶段:(1)自搬移到高地址(2)初始化硬件外设:UART,i2c,网口,EMMC(3)进入用户交互系统,等待用户输入回车(4)没有输入回车执行bootcmd(5)找到zImage和dtb文件(6)bootz加载内核和设备树文件,将bootargs写入设备树choosen节点,并通过r2将设备地址传给内核
zImage:(1)对所有外设初始化(根据设备树中的配置)(2)实现5大功能(3)根据设备树的配置,寻找文件系统(如果找不到kernel panic)(4)启动init进程(5)init通过fork+exec方式启动所以配置自启动进程任务(6)挂载文件系统(7)启动shell
※bootcmd:uboot倒计时结束后执行的任务
※bootargs:对内核进行传参
※7.uboot
uboot的功能:初始化硬件外设,引导启动内核
uboot工作流程:(1)初始化i2c,DDR,EMMC,Serial,Net(2)进入人机交互环节:用户输入回车进入uboot系统,可以输入命令与uboot交互。用户不输入回车,uboot会执行bootcmd
uboot裁剪:通过make menuconfig进行裁剪,需要的功能选中,不需要的功能去除
uboot编译流程:

※8.根文件系统
根文件系统的制作

根文件系统的自启动

根文件系统涉及的脚本:
udev机制,设备驱动加载脚本,busybox,live-build工具