进行Linux驱动开发,首先要搭建开发环境,比如虚拟机的安装,ubuntu的安装配置,各种软件开发环境如vscode的安装等。基本的开发环境完成了,还需要学习并移值uboot,Linux内核,设备树,根文件系统。
本文跳过了uboot,Linux内核,设备树,根文件系统的学习和移植。利用正点原子的提供的教程系统镜像来快速搭建驱动程序开发环境。
1、uboot烧写到SD卡
未插入SD,在ubuntu里输入命令:
ls -l /dev/sd*
然后插入SD卡,仍输入上面的命令,找到新出现的sd*,笔者找到是sdb这个新设备。
然后copy教程镜像里的u-boot.bin(注意有V2.4硬件版本前后的区别)到ubuntu系统(用FileZilla),目标目录~/linux/uboot/alientek_uboot 。
继续执行下面的命令将u-boot.bin写入到SD卡:
chmod 777 imxdownload
./imxdownload u-boot.bin /dev/sdb
完成烧写后退出SD卡。将SD卡插入到开发板,将启动拨码开关设置为从SD卡启动,上电后就可进入uboot启动界面了。
2、linux内核镜像及设备树
在ubuntu上建立tftpboot文件夹:/home/bobluo/linux/tftpboot, 把imx6ull-alientek-emmc.dtb和zImage用FTP传过来(我用的文件是阿尔法V2.4版本及以后和miniV2.2及以后的底板\02、kernel镜像)。
开发板上电后在倒计时前按任意键停止启动,修改环境变量bootcmd如下:
setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'
saveenv
上面的setenv一定要注意空格,特别是bootz 80800000 - 83000000 ,空格一定要敲够,否则启动后就会停在Starting kernel ...
另外注意I.MX6U开发板是可以ping通ubuntu的,而反向不可以,因为uboot对ping没有做回应。
ping 192.168.10.222
Using FEC1 device
host 192.168.10.222 is alive
3、根文件系统
根文件系统放到nfs,所以在ubuntu建目录/home/bobluo/linux/nfs/rootfs,把文件系统\02、busybox-1.29.0根文件系统用FTP传过来。
修改uboot的环境变量如下:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.10.222:/home/bobluo/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.50:192.168.10.222:192.168.10.1:255.255.255.0::eth0:off'
saveenv
4、开发板重启验证
直接上图

参考资料:
- I.MX6U 嵌入式 Linux 驱动开发指南 V2.0.1 正点原子