嵌入式Linux实战:ARM平台系统移植、内核编译与驱动开发全攻略

张开发
2026/4/18 1:05:46 15 分钟阅读

分享文章

嵌入式Linux实战:ARM平台系统移植、内核编译与驱动开发全攻略
前言在嵌入式Linux开发中系统移植、内核编译、驱动添加是工程师必备核心技能。 本文以IMX6ULL为例完整记录开发环境与网络配置Linux内核完整编译流程内核新增驱动文件U-Boot 常用命令NFS/TFTP 远程启动Linux 完整上电启动流程适合嵌入式入门、校招面试、项目移植速查。一、Linux系统三大核心组件一个能正常运行的嵌入式Linux必须包含以下3部分1. BootloaderUboot裸机级引导程序作用初始化CPU、内存、时钟、串口、网口关闭看门狗、MMU、Cache搬运内核到内存向内核传递启动参数移交CPU控制权给内核2. Linux Kernel内核操作系统核心负责进程管理、内存管理文件系统、设备驱动管理网络协议栈 最终生成zImage内核镜像 .dtb设备树3. RootFS根文件系统系统第一个被挂载的文件系统包含系统命令、库文件、配置文件应用程序、设备节点 内核启动最后必须挂载RootFS才能启动init进程。二、开发环境与网络配置1. 环境说明主机Ubuntu 18.04/20.04目标ARM IMX6ULL 开发板服务NFS文件共享、TFTP内核下载编译ARM 交叉编译器2. 有线连接开发板桥接模式sudo vim /etc/network/interfacesauto ens33 iface ens33 inet static address 192.168.1.3 netmask 255.255.255.0 gateway 192.168.1.1操作步骤虚拟机网络适配器 → 桥接模式虚拟网络编辑器 → VMnet0 桥接到有线网卡配置静态IP重启网络/虚拟机3. 无线连接NAT模式auto ens33 iface ens33 inet dhcp三、Linux内核完整编译流程所有操作均在内核源码顶层目录执行1. 加载默认配置cp arch/arm/configs/imx_alientek_emmc_defconfig .config2. 内核图形化配置make menuconfigKconfig定义menuconfig菜单配置结果保存到.configCONFIG_XXXy编译进内核CONFIG_XXXm编译为模块CONFIG_XXXn不编译3. 多线程编译make zImage -j20 # 编译内核 make dtbs # 编译设备树 make # 全编译4. 编译产物路径内核arch/arm/boot/zImage设备树arch/arm/boot/dts/imx6ull-alientek-emmc.dtb四、向内核添加自定义驱动实战以在drivers/char目录下添加demo.c为例创建驱动文件cd drivers/char touch demo.c修改同层 Makefileobj-$(CONFIG_DEMO) demo.o修改同层 Kconfig添加配置项重新配置编译make menuconfig make zImage五、Linux完整启动流程上电到Shell上电 → 加载Bootloader → 初始化硬件 → 搬运内核到内存 → 传参 → 启动内核 → 内核初始化子系统 → 挂载根文件系统 → 启动init进程 → 运行shell → 用户程序CPU从SD卡/Flash加载Uboot到OCRAMUboot初始化内存搬运自身完整代码到内存Uboot通过TFTP/SD卡读取内核设备树到内存Uboot设置bootargs启动内核内核挂载根文件系统启动1号进程init → shell六、U-Boot 常用命令开发必备printenv # 查看环境变量 setenv ipaddr 192.168.1.122 # 设置IP saveenv # 保存环境变量 ping 192.168.1.3 # 网络连通测试 ​ # TFTP下载内核与设备树 tftp 0x80800000 zImage tftp 0x83000000 imx6ull-alientek-emmc.dtb ​ # 启动内核 bootz 0x80800000 - 0x83000000NFS根文件系统启动参数setenv bootargs root/dev/nfs nfsroot192.168.1.3:/home/linux/nfs/imx6/rootfs,nfsvers3 ip192.168.1.123 consolettymxc0,115200 init/linuxrc参数说明root/dev/nfs根文件系统类型nfsrootUbuntu NFS路径ip内核启动IPconsole控制台init第一个用户进程七、NFS 使用Ubuntu ? 开发板Ubuntu 共享目录/home/linux/nfs开发板挂载点/mnt开发板执行挂载mount -o nolock,nfsvers3 192.168.1.3:/home/linux/nfs /mnt八、开发环境一键部署# 1. 内核与设备树放入TFTP目录 # 2. 根文件系统解压到NFS目录 tar -xvf rootfs.tar.bz2?? 九、面试常考关键概念地址无关代码加载地址≠链接地址可运行地址相关代码加载地址必须链接地址相对跳转bl基于PC偏移量跳转绝对跳转ldr直接给PC赋绝对地址总结本文完整覆盖Linux 三大组件网络配置NAT/桥接内核编译完整命令内核添加驱动步骤Uboot 命令与启动参数NFS/TFTP 远程启动上电启动流程

更多文章