linux移植
1、移植一个Linux到ARM上
2、ubuntu上开发应用程序(交叉编译)
----在A平台上开发编译B平台运行的程序
3、移植应用程序到ARM上
nfs----网络文件系统(做网络之间的文件共享)

linux启动流程:
|------------------------------------------|
| 1、bootloader是一个为内核启动准备环境的裸机程序,引导内核启动 |
| 2、kernel操作系统的核心(实现整个系统功能的程序) |
| 3、rootfs 加载(挂载)跟文件系统 |
1、bootloader(uboot)
为了读到arm里面再写到内存当中
--- 初始化异常向量表
--- 初始化CPU(工作模式)
--- 初始化栈
--- 初始化时钟
--- 关看门狗
看门狗(Watchdog Timer, WDT)
用于防止系统死机、实现自动恢复的关键安全机制,相当于系统的 "监护者"。
正常时:程序定时喂狗(重置定时器)
异常时(死机、死循环、崩溃):没人喂狗 → 定时器溢出 → 强制复位(重启)系统
--- 关闭Cache (数据Cache必关,指令可选)
Cache
CPU 内部高速缓存,用来加速内存访问,但它是异步、自动缓存的。
关 Cache:
防止外设寄存器被缓存,导致读写不真实
保证代码搬运、重定位时数据严格一致
让硬件初始化行为可预测、稳定
--- 关MMU
MMU
负责虚拟地址 ↔ 物理地址转换
负责内存权限、属性控制
负责内存映射(比如外设、DDR 映射)
Bootloader 早期只认物理地址,MMU 只会添乱所以关掉
--- 关中断
--- 初始化内存
--- 初始化相关设备(串口、网口)
--- 集成相关协议
--- 搬移内核到内存 --- 向内核传参(根文件系统类型,init进程,控制台)
--- 引导内核启动
-----bootload不再控制CPU,CPU控制权移交给内核
2. kernel 一个复杂的程序
文件管理 进程管理 内存管理
网络管理 设备管理 IPC进程间通信
内核启动到最后阶段 加载(挂载)根文件系统
启动init进程(由内核init进程退化(exec))
init -> 其他进程 -> shell -> uaerapp
3. rootfs 跟文件系统(第一个挂载的文件系统)
一堆文件的集合
--- 配置文件
--- 系统命令
--- 库
--- 用户程序
--- 普通文件(文本、mp3、jpg)
系统上电根据启动模式配置引脚从不同的介质加载bootloader(以SD卡为例)
- cpu拷贝bootloader前半部分到OCRAM, bootloader在前半部分代码中初始化好内存,并搬移自己后半部分到内存中执行,bootloader执行到最
后阶段搬移内核到内存,并引导内核启动
2-1 内核在SD卡中,则bootloader需要在代码中初始化好SD卡,然后读SD的kernel分区写入内存
2-2 内核在ubuntu上,则bootloader需要在代码中初始化有线网卡及集成tftp协议,通过tftp协议下载内核到内存
3-1 根文件系统如果在SD卡中,则内核直接挂载SD卡的rootfs分区
3-2 根文件系统在ubuntu上,则内核应该通过nfs挂载ubuntu上的rootfs目录(bootloader向内核传参是应该包含内核启动阶段使用的ip)
