系统启动需要引导程序
第一步:sd 卡中烧写 Superboot4412-QT4.bin
Superboot4412-QT4.bin 文件中存放的是完整的引导程序
第二步:复制 images
iROM : 固化在芯片内部
BL1: 芯片级代码(三星提供) 存放在外部设备
BL2: 平台相关代码 存放在外部存储设备中 不是三星提供
ARM 共有 7 种工作模式:
用户(user) 管理(SVC) 系统(system) 中断(IRQ) 快中断(FIQ) 中止(Abort) 未定义(Undef)
开发板上电,运行 iROM(BL0),失能像看门狗等设备,初始化栈、ZI/RW、时钟等,判断启动方式,从对应的设 备中搬运 BL1 到 iRAM,校验成功跳转到 iRAM 中执行 BL1
BL1 运行时 初始化相应的 IRQ 和 SVC_STACK,从对应的启动设备中搬运 BL2 到 iRAM,校验成功跳转到 BL2 执行BL2 初始化 IRQ 和 SVC_STACK,设置时钟、初始化外扩的 DRAM,从相应的启动设备中搬运 OS 到 DRAM,跳转到DRAM 中运行
Superboot4412-QT4.bin 451KB = BL1+ BL2 + bootloader
分析从 eMMC 启动时过程:
上电后 运行芯片内部的 iROM,硬件设置,从 eMMc 搬运 BL1 到 iRAM
校验完成之后跳转 iRAM 执行 BL1
BL1 设置 IRQ、scv_statck,从 eMMC 搬运 BL2 到 iRAM,校验完成跳转到 BL2 (E4412_N.bl1.bin –>8K)
BL2 设置 IRQ、scv_statck,设置时钟,初始化 DRAM,从 eMMc 搬运 boot loader 到 DRAM (BL2
→
16k)
跳转到 DRAM 执行 boot loader(引导内核,挂接文件系统)
交叉编译:在一个平台上生成另一个平台运行的代码
交叉编译工具安装步骤
1>安装 32 位库 sudo apt install lib32ncurses-dev lib32z1
2>将交叉编译工具压缩包复制到 Ubuntu(路径没有要求)
3>将其解压到根目录 sudo tar -xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /
4>在 Ubuntu 的/etc/profile 文件末尾添加一句
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
保存退出
(其中 export 是 Linux 中的 shell 指令,作用设置环境变量 , $PATH 获取 PATH 变量中的值,:(冒号)作为不
同路径间的分隔符)
5>使环境变量生效 source /etc/profile
6>arm-linux-gcc -v 查看版本信息
![](https://img-blog.csdnimg.cn/direct/0917439ab6184636b1053349ff9be557.png)
裸机驱动 LED
1>将 ledC 语言文件夹复制到 Ubuntu
2>Ubuntu 终端 跳转到 ledC 语言文件夹
cd ledC 语言
3>make
4>cd sd_fuse
5>make
6>将 sd 卡识别到 Ubuntu, ls /dev/sd* 看是否有/dev/sdb 这个文件
7>终端执行 ./fast_fuse.sh /dev/sdb ../led.bin
![](https://img-blog.csdnimg.cn/direct/afd13368ac6548ebb664177517c5de75.png)