正点原子阿尔法开发板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
相关推荐
大江东去浪淘尽千古风流人物2 天前
【Micro-WL Robot】桌面级轮腿机器人全栈解析:LQR平衡控制、SimpleFOC驱动与五连杆腿部机构源码深度拆解
驱动开发·机器人·esp32·lqr·simplefoc·轮腿机器人·平衡控制
咖啡星人k2 天前
自然语言驱动开发(NLDD):全栈开发的新范式与实践指南
驱动开发
阿昭L2 天前
Windows键盘过滤
windows·驱动开发·windows内核·过滤驱动
hai3152475433 天前
# 矩阵算法·算子对齐工具 v6.1 — 技术规格与使用手册
java·开发语言·驱动开发·神经网络·spring·目标检测·矩阵
qq_411262424 天前
sdk不支持分配psarm如何办,能不能象S3一样支持
驱动开发
湉湉家的小虎子4 天前
【科普贴】浅谈UFS接口——偏硬件解析
驱动开发·嵌入式硬件·fpga开发·硬件工程
枳实-叶5 天前
【Linux驱动开发】第18天:I2C驱动深度解析
linux·运维·驱动开发
小此方5 天前
Re:Linux系统篇(二十五)进程篇·十:深度硬核!Linux 进程等待,从 task_struct 源码到位图状态解构
linux·运维·驱动开发
Gentle5866 天前
SENT&SPC协议中的CRC4校验
驱动开发
智者知已应修善业6 天前
【proteus设计文氏正弦波信号发生器】2023-5-9
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程