写在前面
本文是根据B站UP主:韦东山发布教学课程学习。视频链接:【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通 | Linux应用驱动开发基于I.MX6ULL/STM32MP157/T113/D1H开发板
本文不讲解环境配置等基本内容,主要从开发出发进行学习笔记的记录。
但是是基于海思平台
嵌入式Linux启动流程

编译和替换内核
本部分是简单的编译并替换内核、设备树、驱动等。
注:在编译驱动前需要先编译内核,因为编译后的内核能够将运行平台(x86、arm、mips等)等信息配置好,这样驱动编译时能够知道什么平台使用。
使用qemu模拟arm环境
参考文章:CSDN-(2023)从零开始用qemu搭建虚拟arm环境
使用 vexpress-a9 这款开发板。vexpress-a9 是 Arm 公司自己设计的一款 4 核 Cortex-A9 开发板,U-Boot、Linux Kernel 和 QEMU 对这款开发板都做了完整的支持。
- 安装
qemu-system-arm环境:sudo apt-get install qemu-system-arm - 安装交叉编译工具:
sudo apt-get install gcc-arm-linux-gnueabi - 下载内核:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz - 解压内核并进入目录:
tar xf linux-5.10.tar.gz && cd linux-5.10 - 生成vexpress开发板子的config文件:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig - 编译内核:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm - 制作根文件系统,记得换目录,别都弄在一堆
- 下载busybox源码:
wget http://www.busybox.net/downloads/busybox-1.36.0.tar.bz2 - 编译安装:
make defconfig && make CROSS_COMPILE=arm-linux-gnueabi- && make install CROSS_COMPILE=arm-linux-gnueabi- - 新建目录,用于保存根目录结构:
mkdir rootfs - 拷贝和创建文件及目录:
cp busybox-1.36.0/_install/* -r rootfs/ cd rootfs //创建必要路径 # mkdir etc dev mnt # mkdir -p proc sys tmp mnt # mkdir -p etc/init.d/ //添加文件系统挂载信息 # vim etc/fstab proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 //开机脚本 # vim etc/init.d/rcS echo -e "Welcome to tinyLinux" /bin/mount -a echo -e "Remounting the root filesystem" mount -o remount,rw / mkdir -p /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s # chmod 755 etc/init.d/rcS //busybox执行的文件 # cd dev //创建设备节点 c为字符设备 5为主设备号,1为从设备号 sudo mknod console c 5 1 sudo mknod null c 1 3 sudo mknod tty1 c 4 1 sudo mknod tty2 c 4 2 sudo mknod tty3 c 4 3 sudo mknod tty4 c 4 4 - 打包根文件系统:
//生成镜像 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=512 //格式化ext3 mkfs.ext3 a9rootfs.ext3 //挂载拷贝文件 sudo mkdir tmpfs sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop sudo cp -r rootfs/* tmpfs/ sudo umount tmpfs
- 下载busybox源码:
- 准备好内核、设备树、根文件系统拷贝到同一目录:
运行:qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
结果:

