LV06-01-驱动程序-02-驱动开发环境搭建

本文主要是驱动开发环境搭建相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.2的64位版本
VMware® Workstation 17 Pro 17.6.0 build-24238078
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,使用的uboot版本为U-Boot 2019.04
linux内核 linux-4.19.71(NXP官方提供)
点击查看本文参考资料
分类 网址 说明
官方网站 https://www.arm.com/ ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.nxp.com.cn/ NXP官方网站
https://www.nxpic.org.cn/NXP 官方社区
https://u-boot.readthedocs.io/en/latest/u-boot官网
https://www.kernel.org/linux内核官网
点击查看相关文件下载
分类 网址 说明
NXP https://github.com/nxp-imx NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库
nxp-imx/linux-imx/releases/tag/v4.19.71 NXP linux内核仓库tags中的v4.19.71
nxp-imx/uboot-imx/releases/tag/rel_imx_4.19.35_1.1.0 NXP u-boot仓库tags中的rel_imx_4.19.35_1.1.0
I.MX6ULL i.MX 6ULL Applications Processors for Industrial Products I.MX6ULL 芯片手册(datasheet,可以在线查看)
i.MX 6ULL Applications ProcessorReference Manual I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网)
Source Code https://elixir.bootlin.com/linux/latest/source linux kernel源码
https://elixir.bootlin.com/u-boot/latest/source uboot源码

一、网络环境

在进行驱动开发的时候,我们要频繁的修改设备树、根文件系统和设备树,每次都烧写到sd卡或者eMMC就很麻烦,uboot是支持从tftp下载内核和设备树,linux内核也支持直接从nfs服务器挂载根文件系统。

1. 网络开发环境

我们根据这篇笔记《01嵌入式开发/02IMX6ULL平台/LV02-开发环境/LV02-03-网络环境-01-网络开发环境搭建.md》搭建网络开发环境,实现uboot可以ping通windows和ubuntu。

2. TFTP环境

我们要从ubuntu下载内核和设备树文件,需要通过tftp服务,我们根据这篇笔记《01嵌入式开发/02IMX6ULL平台/LV02-开发环境/LV02-03-网络环境-02-TFTP环境搭建.md》完成tftp环境的搭建,实现从ubuntu的tftp服务器目录下载文件。

3. NFS环境

我们linux内核启动后,需要挂载根文件系统,这个时候可以从nfs服务器的指定目录挂载,可以根据《01嵌入式开发/02IMX6ULL平台/LV02-开发环境/LV02-03-网络环境-03-NFS环境搭建.md》这篇笔记完成NFS服务器环境的搭建。

二、交叉编译工具

驱动开发中的代码还是要跑在arm开发板上,还是需要交叉编译工具链,可以参考《01嵌入式开发/02IMX6ULL平台/LV02-开发环境/LV02-01-交叉编译工具链.md》这里进行安装,或者参考这个也行《01嵌入式开发/02IMX6ULL平台/LV05-系统镜像/LV05-02-U-Boot-01-NXP-uboot.md》。只参考安装方式即可,我后来用的是这个版本的arm gcc:

1
2
3
4
5
6
7
8
sumu@sumu-virtual-machine:~$ arm-linux-gnueabihf-gcc -v
使用内建 specs。
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/sumu/2software/gcc-arm-linux-gnueabihf-8.3.0/bin/../libexec/gcc/arm-linux-gnueabihf/8.3.0/lto-wrapper
目标:arm-linux-gnueabihf
配置为:/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/src/gcc/configure --target=arm-linux-gnueabihf --prefix= --with-sysroot=/arm-linux-gnueabihf/libc --with-build-sysroot=/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/build-arm-linux-gnueabihf/install//arm-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/build-arm-linux-gnueabihf/host-tools --with-mpfr=/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/build-arm-linux-gnueabihf/host-tools --with-mpc=/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/build-arm-linux-gnueabihf/host-tools --with-isl=/tmp/dgboter/bbs/rhev-vm8--rhe6x86_64/buildbot/rhe6x86_64--arm-linux-gnueabihf/build/build-arm-linux-gnueabihf/host-tools --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-arch=armv7-a --with-pkgversion='GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)'
线程模型:posix
gcc 版本 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))

下载地址在这里:Downloads | GNU-A Downloads – Arm Developer

三、源码版本

1. uboot

uboot我用的是这个版本:Release rel_imx_4.19.35_1.1.0: MLK-22866 imx8: Remove the optee shared memory from DDR banks · nxp-imx/uboot-imx (github.com)

image-20241115080005730

2. 内核

内核用的这个:Release v4.19.71 · nxp-imx/linux-imx (github.com)

image-20241115080058523

3. 根文件系统

根文件系统用的buildroot:Index of /downloads/ (buildroot.org)

image-20241115080309669

四、准备工作

1. 服务器目录

1.1 tftp服务器目录

我配置完后,tftp服务器目录为~/3tftp

image-20241117101147988

1.2 nfs目录

1
2
cd ~/4nfs
ls
image-20241117101305897

这个目录是nfs顶层目录,后续的根文件系统会放在imx6ull_rootfs目录中:

image-20241117101419938

2. IP地址

2.1 windows

windows的IP如下:

1
2
3
4
5
windows(使用扩展坞的网口):
Ethernet adapter 以太网 2:
IPv4 Address. . . . . . . . . . . : 192.168.10.100
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.10.1

2.2 ubuntu

1
2
ubuntu(VMware新建一个桥接网卡)
ens37: inet 192.168.10.101 netmask 255.255.255.0 broadcast 192.168.10.255

2.3 开发板

开发板的IP我们配置成这样:

1
2
3
4
5
6
7
setenv ipaddr 192.168.10.102     # 开发板 IP 地址
setenv ethaddr 00:04:9f:04:d2:35 # 开发板网卡 MAC 地址 b8:ae:1d:01:00:00
setenv gatewayip 192.168.10.1 # 开发板默认网关
setenv netmask 255.255.255.0 # 开发板子网掩码
setenv serverip 192.168.10.101 # 服务器地址,也就是 Ubuntu 地址
saveenv # 保存环境变量
print ipaddr ethaddr gatewayip netmask serverip

3. uboot配置

接下来是配置uboot的参数,uboot我使用的是我自己的仓库编译出来的:u-boot: linux学习过程中的uboot仓库 (gitee.com)

3.1 配置IP

启动之后我们要配置一下开发板的IP

1
2
3
4
5
6
7
=> setenv ipaddr 192.168.10.102     # 开发板 IP 地址
=> setenv eth1addr 32:34:46:78:9A:DD
=> setenv gatewayip 192.168.10.1 # 开发板默认网关
=> setenv netmask 255.255.255.0 # 开发板子网掩码
=> setenv serverip 192.168.10.101 # 服务器地址,也就是 Ubuntu 地址
=> saveenv # 保存环境变量
=> print ipaddr ethaddr gatewayip netmask serverip

3.2 bootargs参数

接下来我们设置一下启动参数,这个主要是给linux启动的时候提供根文件系统挂载的地址:

1
2
3
4
# setenv bootargs 'console=开发板串口,波特率 root=挂载方式 nfsroot=虚拟机ubuntu的IP地址:虚拟机ubuntu中文件系统路径,proto=传输协议 读写权限 ip=开发板IP地址:虚拟机ubuntu的IP地址:网关地址:子网掩码::开发板网口:off init=/linuxrc'

=> setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.101:/home/sumu/4nfs/imx6ull_rootfs,proto=tcp rw ip=192.168.10.102:192.168.10.101:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc'
=> saveenv

3.3 bootcmd参数

这个主要是告诉uboot去哪里下载zImage和设备树文件:

1
2
=> setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000'
=> saveenv

五、开发板启动测试

1. uboot启动

image-20241117104506460

2. 拷贝内核和设备树

image-20241117104540291

3. 内核启动

image-20241117104617184

4. 挂载根文件系统

image-20241117104706855

5. 进入系统

启动成功后会提示我们登录开发板,输入root即可(主要看根文件系统构建的时候怎么配置的):

image-20241117104754621