正点原子阿尔法开发板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
相关推荐
枳实-叶1 天前
【Linux驱动开发】第6天:互斥锁mutex/自旋锁spinlock+驱动全流程+应用测试程序
linux·驱动开发
nuoxin1141 天前
SSD201-富利威
arm开发·驱动开发·fpga开发·ffmpeg·射频工程
2601_949695591 天前
电脑鼠标一卡一卡的原因是什么?附详细排查步骤
驱动开发·计算机外设·电脑
颖火虫盟主2 天前
规范驱动开发(Spec-Driven Development)
驱动开发
charlie1145141913 天前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
长安第一美人3 天前
RT-Thread 工业屏驱动开发实战:UART 串口屏协议解析 + 数据实时刷新 + 设备驱动框架完整实现
驱动开发·嵌入式硬件·rt-thread·工业控制·uart通信·串口屏驱动
不怕犯错,就怕不做4 天前
RK3562的CPU如何降频及关闭硬件编解码
linux·驱动开发·嵌入式硬件
可可西里_X_back4 天前
Linux学习(二)- 驱动开发步骤
linux·驱动开发·学习
云天AI实战派4 天前
AI 智能体/API 调用故障排查指南:实时语音、Codex 权限与 Spec 驱动开发全流程修复手册
人工智能·驱动开发·chatgpt·api·codex
小猪写代码4 天前
Linux 驱动开发
驱动开发