一、什么是 Linux 移植?为什么要做?
**Linux 移植(Porting Linux)**指的是将 Linux 内核、设备树、驱动及文件系统,适配到特定的硬件平台(如 STM32MP1、i.MX6、瑞芯微、Allwinner、RISC-V SoC)上运行。
为什么需要移植?
一句话总结: 移植让 Linux 真正运行在你控制的硬件上,而不是开发板厂商预装的“系统镜像”。
二、移植的核心组件有哪些?
Linux 系统从引导到运行,主要涉及以下五大核心部分:
如果将 Linux 移植比喻为造一辆车:
三、完整移植流程:从源码到可运行系统
第一步:准备交叉编译环境
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
第二步:获取并配置 U-Boot
git clone
cd u-boot
make
make
定制支持的串口、Flash 驱动、启动方式(如 SD 卡、SPI-NAND)
第三步:获取并裁剪 Linux 内核
git clone
cd linux
make
make zImage dtbs modules
注意:
第四步:定制 Device Tree(设备树)
设备树描述了 CPU、内存、串口、GPIO、外设等硬件资源。移植时应重点修改:
&uart0 {
status = "okay";
};
&spi1 {
status = "okay";
flash@0 {
compatible = "winbond,w25q128";
...
};
};
第五步:构建 Root FileSystem
可选方式:
使用 Buildroot (推荐,自动打包)
使用 Busybox + 自建目录结构
使用 Yocto(适合商业项目)
关键目录说明:
/bin /sbin , /usr | |
/etc/inittab | |
/dev /proc , /sys | |
/etc/init.d/ | |
/lib |
确保 init 系统正常:
/etc/inittab:
::sysinit:/etc/init.d/rcS
第六步:烧写与启动
将以下文件烧录到开发板:
烧写方式:
四、常见错误与调试方法
bootargs 指向正确 DTB | ||