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 | sumu@sumu-virtual-machine:~$ arm-linux-gnueabihf-gcc -v |
下载地址在这里: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)
2. 内核
内核用的这个:Release v4.19.71 · nxp-imx/linux-imx (github.com)
3. 根文件系统
根文件系统用的buildroot:Index of /downloads/ (buildroot.org)
四、准备工作
1. 服务器目录
1.1 tftp服务器目录
我配置完后,tftp服务器目录为~/3tftp
:
1.2 nfs目录
1 | cd ~/4nfs |
这个目录是nfs顶层目录,后续的根文件系统会放在imx6ull_rootfs目录中:
2. IP地址
2.1 windows
windows的IP如下:
1 | windows(使用扩展坞的网口): |
2.2 ubuntu
1 | ubuntu(VMware新建一个桥接网卡) |
2.3 开发板
开发板的IP我们配置成这样:
1 | setenv ipaddr 192.168.10.102 # 开发板 IP 地址 |
3. uboot配置
接下来是配置uboot的参数,uboot我使用的是我自己的仓库编译出来的:u-boot: linux学习过程中的uboot仓库 (gitee.com)。
3.1 配置IP
启动之后我们要配置一下开发板的IP
1 | => setenv ipaddr 192.168.10.102 # 开发板 IP 地址 |
3.2 bootargs参数
接下来我们设置一下启动参数,这个主要是给linux启动的时候提供根文件系统挂载的地址:
1 | setenv bootargs 'console=开发板串口,波特率 root=挂载方式 nfsroot=虚拟机ubuntu的IP地址:虚拟机ubuntu中文件系统路径,proto=传输协议 读写权限 ip=开发板IP地址:虚拟机ubuntu的IP地址:网关地址:子网掩码::开发板网口:off init=/linuxrc' |
3.3 bootcmd参数
这个主要是告诉uboot去哪里下载zImage和设备树文件:
1 | => setenv bootcmd 'tftp 80800000 /zImage\;tftp 83000000 /imx6ull-alpha-emmc.dtb\;bootz 80800000 - 83000000' |
五、开发板启动测试
1. uboot启动
2. 拷贝内核和设备树
3. 内核启动
4. 挂载根文件系统
5. 进入系统
启动成功后会提示我们登录开发板,输入root即可(主要看根文件系统构建的时候怎么配置的):