Files
EmbeddedSoftwareLearn1/05-EmbeddedLinux
2025-06-16 17:33:38 +08:00
..
2025-06-16 13:57:43 +08:00
2025-06-16 17:33:38 +08:00

🟢 第五层:嵌入式 Linux 开发基础

嵌入式 Linux 是物联网、智能设备、工业控制等领域的核心技术之一。本层重点掌握从 Bootloader 到驱动的开发过程,理解 Linux 系统构成及其移植方法。


🔹 嵌入式 Linux 系统概览

📌 嵌入式 Linux 特点

  • 可裁剪、可定制、模块化强
  • 支持多种架构(ARM、MIPS、RISC-V 等)
  • 社区支持强大(开源内核、驱动丰富)

📌 系统组成

[Bootloader] → [Kernel] → [Root File System] → [User Application]
  • Bootloader:负责上电后硬件初始化、加载内核(如 U-Boot)
  • Kernel:Linux 内核,管理硬件与系统资源
  • RootFS:根文件系统,包含用户空间程序
  • 应用层:运行用户程序、脚本、服务等

🔹 启动流程详解

📌 通用启动流程

Power On →
  BootROM →
    Bootloader (SPL/U-Boot) →
      Load & Decompress Kernel →
        Kernel 初始化 →
          挂载 RootFS →
            启动 init →
              Shell / App

📌 U-Boot(主流 Bootloader)

  • 二阶段:SPL(初始化内存)+ U-Boot 本体
  • 功能:串口输出、TFTP 下载、引导内核、环境变量配置等
  • 命令示例:
setenv bootargs console=ttyS0 root=/dev/mmcblk0p2
tftp 0x80008000 zImage
bootz 0x80008000 - 0x83000000

🔹 设备树(Device Tree)

📌 基本概念

  • 描述硬件资源的结构化信息
  • 独立于内核源码,提高可移植性
  • 文件类型:.dts(源文件)、.dtsi(包含文件)、.dtb(二进制)

📌 示例结构

uart1: serial@40011000 {
    compatible = "vendor,uart";
    reg = <0x40011000 0x400>;
    interrupts = <5>;
    status = "okay";
};

📌 编译设备树

make ARCH=arm CROSS_COMPILE=arm-linux- dtbs

常用 Linux 命令与开发工具

文件与目录管理

命令 功能说明
ls -l 列出文件详细信息
cd /path 进入目录
cp source dest 拷贝文件/目录
mv old new 移动/重命名文件
rm -rf dir 删除文件或目录
mkdir name 创建新目录
find / grep 搜索文件/内容

权限与用户管理

命令 功能说明
chmod 755 file 修改权限(rwx)
chown user:group 更改文件拥有者
sudo 以管理员身份执行命令
whoami / id 查看当前用户信息

进程管理

命令 功能说明
ps / top 查看运行进程
kill PID 杀死某个进程
htop 进阶图形化进程管理工具
nice, renice 修改进程优先级

网络调试

命令 功能说明
ping 测试网络连通性
ifconfig / ip 配置 IP、MAC
netstat -anp 查看网络连接状态
scp, rsync 文件远程复制
ssh user@host SSH 登录远程系统

设备与文件系统

命令 功能说明
mount / umount 挂载 / 卸载设备
df -h 查看磁盘空间使用情况
lsblk, blkid 查看块设备信息
`dmesg tail`

软件包管理(针对开发板所用 Linux)

工具 说明
apt, opkg, yum 安装 / 卸载软件包
dpkg -i pkg.deb 安装本地 deb 包

Shell 脚本与自动化

  • #!/bin/sh 或 #!/bin/bash:脚本头部声明
  • 脚本权限设置:chmod +x script.sh
  • 示例:
#!/bin/bash
for i in {1..5}
do
   echo "Test $i"
done

交叉编译相关命令(Makefile 环境)

命令/工具 说明
make 使用 Makefile 构建
arm-linux-gcc 使用交叉编译器编译
file a.out 查看可执行文件平台架构

🔹 Linux 驱动开发模型

📌 驱动分层模型

[硬件设备] ←→ [总线] ←→ [Device] ←→ [Driver] ←→ [内核]
  • 总线(bus):如 platform、i2c、spi 总线
  • 设备(device):描述具体外设
  • 驱动(driver):实现对设备的控制逻辑

📌 字符设备驱动框架

struct file_operations fops = {
    .open = my_open,
    .read = my_read,
    .write = my_write,
    .release = my_release,
};

int major = register_chrdev(0, "mydev", &fops);

📌 平台驱动开发流程

  1. 定义 platform_device
  2. 编写并注册 platform_driver
  3. 通过 of_match_table 匹配设备树节点
  4. 实现 probe/remove 等接口

🔹 根文件系统构建

📌 常见文件系统类型

  • ext3/ext4:标准 Linux 文件系统
  • squashfs:只读压缩文件系统,适合嵌入式
  • initramfs:内存文件系统

📌 文件系统布局(典型)

/
├── bin/       → 常用命令
├── sbin/      → 系统工具
├── etc/       → 配置文件
├── dev/       → 设备节点
├── lib/       → 库文件
├── proc/      → 内核虚拟文件系统
├── sys/       → 设备/驱动信息
├── usr/       → 用户软件
├── tmp/       → 临时目录
└── home/      → 用户主目录

📌 构建方式

  • BusyBox + 自制文件结构
  • Buildroot:快速构建定制系统
  • Yocto:更灵活、工业级构建方案

🔹 工具链与调试手段

📌 交叉编译工具链

  • gcc-arm-linux-gnueabi
  • arm-none-eabi-gcc
  • 使用环境变量指定:
export CROSS_COMPILE=arm-linux-

📌 GDB 调试

  • GDB Server + Remote Debug
gdb-multiarch vmlinux
target remote :1234

📌 常用调试工具

工具 用途
GDB 程序级调试
strace 跟踪系统调用
dmesg 内核日志查看
ldd 查看依赖的库文件
top / htop 查看系统资源使用情况
lsmod/insmod 加载/查看内核模块

🔹 常见开发平台

平台 特点
Raspberry Pi 社区活跃,支持 Linux 全栈
Allwinner / Rockchip 国产主控,适配良好
BeagleBone 支持 PRU、实时协处理器
STM32MP1 支持 Linux + Cortex-M 协同

🔚 小结

嵌入式 Linux 是从单片机迈向高性能系统开发的核心门槛,掌握其启动流程、设备树结构与驱动框架是后续学习内核裁剪、系统移植与 IoT 平台开发的基础。