正点原子阿尔法开发板V2.4 驱动开发前置--系统移植

硬件信息

  • 开发板版本:正点原子阿尔法开发板V2.4(EMMC)
  • CPU型号:I.MX6ULL
  • 内存:512MB DDR3
  • 外存(相当于磁盘):8G EMMC

系统移植

1. BootLoader

uboot(Universal Boot Loader, 通用BootLoader)是一款开源的BootLoader软件,没有适配具体芯片。

官方的原始uboot -> 原厂适配的uboot -> 开发板厂商适配的uboot

  • 查看新插入的块设备:
shell 复制代码
ls /dev/sd*

/dev/sdb是块设备, /dev/sdb1是块设备的第一个分区。

uboot命令

  • 基础命令
shell 复制代码
# 查看当前uboot支持所有的命令
help
# 查看uboot版本
version
# 查看板子信息
bdinfo
# 查看环境变量,环境变量都是字符串
printenv
# 新建/修改/删除环境变量
setenv  # 新建/修改/删除DDR中的环境变量值
saveenv # 把DDR中的环境变量值写到Flash里
# e.g. 修改
setenv bootdelay 5
saveenv
# e.g. 新建
setenv myvar 1
saveenv
# e.g. 删除
setenv myvar
saveenv
  • 网络相关命令
shell 复制代码
# 基础网络参数
setenv ipaddr 192.168.183.100
setenv ethaddr b8:ae:1d:01:00:00 
setenv gatewayip 192.168.183.1
setenv netmask 255.255.255.0
setenv serverip 192.168.183.128 
saveenv

# nfs/tftp下载内核镜像
nfs 80800000 192.168.1.128:/home/mazy/nfs/zImage # 内存地址 内核镜像Pathname
tftp 80800000 zImage # 内存地址 内核镜像名字
  • 启动命令
shell 复制代码
# bootz, boot zImage
bootz 80800000 - 83000000 # zImage地址 initrd地址(没有用-表示) 设备树地址

# boot会直接读取环境变量bootcmd来启动Linux
# bootargs指定:
# Linux终端ttymxc0,波特率115200;
# root=指定根文件系统挂载位置/dev/mmcblk1p2,即mmc设备1,分区2;
# rootwait,表示等待mmc设备初始化完成以后再挂载
# rw表示根文件系统可以读写
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.128:/home/mazy/nfs/ rootfs ip=192.168.1.50:192.168.1.128:192.168.1.1:255.255.255.0::eth0:off'
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 my.dtb; bootz 80800000 - 83000000'
saveenv
boot
  • 复位命令
shell 复制代码
reset

2. Linux内核移植

  1. 搭建开发环境
    • 安装交叉编译工具链
    • 获取内核源码
      • 芯片厂商提供(推荐
      • 开发板厂商提供(移植过的)
      • 主线内核(kernel.org)
  2. 配置内核
    • 复制一份芯片厂商板子默认配置进行修改(my_defconfig)
    • 配置内核选项make menuconfig
  3. 编写设备树文件
    • 复制一份芯片厂商板子设备树文件进行修改(my.dts)
    • 在设备树Makefile编译选项中添加此设备树
  4. 编译内核
  5. 启动内核

2.1 内核源码

shell 复制代码
# 内核源码路径:
# NXP官方原版Linux内核:开发板光盘/1、例程源码/4、NXP官方原版Uboot和Linux/linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
# I.MX6U-ALPHA开发板移植好的Linux内核:开发板光盘/1、例程源码/3、正点原子Uboot和 Linux出厂源码/linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2

2.2 芯片厂商板子默认配置:

shell 复制代码
# 芯片厂商板子默认配置:arch/arm/configs/
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make clean
make imx_v7_mfg_defconfig
make -j16
# 编译生成:
# arch/arm/boot/zImage
# arch/arm/boot/dts/imx6ull-14x14-evk.dtb

2.2 修改芯片厂商板子默认配置:

shell 复制代码
# 芯片厂商板子默认配置:arch/arm/configs/
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
cp imx_v7_mfg_defconfig my_defconfig
vim my_defconfig # 注释掉 CONFIG_ARCH_MULTI_V6=y
make clean
make my_defconfig
make -j16
# 编译生成:
# arch/arm/boot/zImage
# arch/arm/boot/dts/imx6ull-14x14-evk.dtb

2.3 设备树

shell 复制代码
cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts my.dts
# 在arch/arm/boot/dts/Makefile中添加新的设备树文件进行编译,dtb-$(CONFIG_SOC_IMX6ULL) += my.dtb

2.4 编译内核

shell 复制代码
make distclean
make my_defconfig
make menuconfig
make all -j16
# 编译生成的内核镜像zImage和设备树.dtb路径:
# arch/arm/boot/zImage
# arch/arm/boot/dts/xxx.dtb
vmLinux、zImage、Image、uImage有什么区别?
  • vmLinux(virtual memory Linux, 支持虚拟内存的Linux)是原始的未压缩的内核可执行文件(ELF格式),主要用于内核调试。
  • Image是从vmLinux提取的二进制代码段,去掉了ELF头部和调试信息,是未压缩的。
  • zImage(zipped Image, 压缩的Image)是经过gzip压缩后的Image。
  • uImage(uboot zImage)是加了uboot引导内核信息头的zImage,老版本的uboot使用的内核镜像。

总结:使用的内核镜像是去掉调试信息的、压缩后的内核文件zImage

2.5 启动内核

shell 复制代码
# 把内核镜像和设备树文件复制到tftp服务器文件夹下
cp arch/arm/boot/zImage ~/tftp/
cp arch/arm/boot/dts/my.dtb ~/tftp/
# tftp把内核镜像和设备树下载到DDR内存里,启动
tftp 80800000 zImage
tftp 83000000 my.dtb
bootz 80800000 - 83000000
相关推荐
智者知已应修善业3 小时前
【100赫兹50分频得到2赫兹频率74HC14+74HC160】2023-6-26
驱动开发·经验分享·笔记·硬件架构·硬件工程
不怕犯错,就怕不做14 小时前
Linux-Sensor驱动移植与调试(转载)
linux·驱动开发·嵌入式硬件
抠脚学代码20 小时前
Linux开发-->驱动开发-->字符设备驱动框架(2)
linux·运维·驱动开发
charlie11451419121 小时前
嵌入式Linux驱动开发(3)——内核模块机制 - Linux 的插件系统
linux·运维·开发语言·驱动开发·嵌入式硬件·学习
抠脚学代码1 天前
Linux开发-->驱动开发-->设备树
linux·驱动开发·设备树
charlie1145141912 天前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
海边夕阳20062 天前
Vibe Coding与SDD规范驱动:从氛围编程到规范驱动开发
人工智能·驱动开发·经验分享
charlie1145141912 天前
嵌入式Linux驱动开发(4)——内核打印详解
linux·驱动开发·imx6ull
xiaoxiang96092 天前
TDD测试驱动开发:从理论到实战的完整指南(含AI增强工作流)
人工智能·驱动开发·tdd