Kernel Development on ARM
实验目标:
- 了解片上系统 System on a Chip(SoC)的含义
- 熟悉使用 ARM 作为受支持架构的嵌入式世界
- 了解主板支持包的含义(BSP)
- 以 i.MX6UL 平台为例,使用 Qemu 编译和引导 ARM 内核
- 使用设备树熟悉硬件描述
片上系统 System on a Chip 是将整个系统集成到其上的集成电路(IC)
通常在 SoC 上可以找到的组件包括中央处理单元(CPU)、内存、输入/输出端口、存储设备以及更复杂的模块,如音频数字接口、神经处理单元(NPU)或图形处理单元(GPU)
SoC 可用于各种最常见的应用,包括:
- 消费类电子产品(电视机、手机、视频游戏机)
- 工业计算机(医学成像等)
- 汽车
- 家电
对于 SoCs,最好使用 ARM 架构,使用的标准指令集架构是 RISC-V(精简指令集计算机,Reduced Instruction Set Computer-RISC)
ARM 平台的简化视图如下图所示:
- 一或者多个 CPU
- 一个系统总线
- 时钟和复位模块(PLL,OSC,复位控制器)
- 中断控制器
- 定时器
- 内存控制器
- 外设控制器
以下是 i.MX6UL 平台的完整框图:
Board Support package
Board Support Package(BSP)是允许演示特定硬件平台功能的最小软件包集:
- 工具链 Toolchain:为ARM平台生成可执行代码的交叉编译器
1 | sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf # for arm32 |
- BootLoader 引导加载程序
- Linux 内核映像、设备树文件和驱动程序
- Rootfs 根文件系统
Device tree
设备树 DT 是用于描述系统中硬件设备的树结构,树中的每个节点描述一个设备,因此称为设备节点,引入 DT 是为了提供一种发现 “non-discoverable 不可发现” 的硬件的方法
设备树存储在设备树源(.dts)中,并编译为设备树 blob(.dtb)
- 一个节点可能包含以该格式排列的多个属性,名称是一个字符串,值可以是字节,字符串,字符串数组
- 下面是一个示例:
1 | / { |
Rootfs
根文件系统是挂载在文件层次结构顶部的文件系统,它至少应包含允许系统引导到 shell 的关键文件
- 我们将使用 Yocto 根图像,为了下载一个 rootfs 映像,需要运行:
1 | cd tools/labs/ |
Exercises
要解决练习,您需要执行以下步骤:
- 从模板准备 skeletons
- 构建模块
- 将模块复制到虚拟机
- 启动 VM 并在 VM 中测试模块
1 | make clean |
ARM 内核编译:
1 | ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make menuconfig |
内核模块编译:
1 | modules build |
ARM 内核启动:
1 | qemu-system-arm -M mcimx6ul-evk -cpu cortex-a7 -m 512M -kernel arch/arm/boot/zImage -nographic -dtb arch/arm/boot/dts/imx6ul-14x14-evk.dtb -append "root=/dev/mmcblk0 rw console=ttymxc0 loglevel=8 earlycon printk" -sd tools/labs/core-image-minimal-qemux86.ext4 |