前提:
实验开发板:imx6ul 100ask
实验前提:
- ubuntu已经安装tftp和nfs工具,并创建了tftp目录和nfs目录
- 已经配置好交叉编译工具
- 已经下载源码压缩包并解压出文件夹100ask_imx6ul-sdk
一、编译并烧写bootloader
- 进入Uboot源码目录:cd Uboot-2017.03
- 清除编译文件:make distclean
- 编译配置文件:make mx6ull_14x14_evk_defconfig
- 编译源码:make
- 将编译出来的镜像文件下载到SD卡:sudo dd if=u-boot-dtb.imx of=/dev/sdb bs=1k seek=1 conv=fsync
注意:下载前可以使用ls /dev/sd*查看插入的是哪个sd卡
二、编译内核和设备树
- 进入内核源码目录:cd Linux-4.9.88
- 清除:make mrproper
- 编译配置文件:make 100ask_imx6ull_defconfig
- 编译内核:make zImage
- 编译设备树:make dtbs
- 将arch/arm/boot 目录下生成 zImage 内核文件和 arch/arm/boot/dts 目录下生成设备树的二进制文件 100ask_imx6ull-14x14.dtb拷贝到tftp目录下
三、编译根文件按系统
- 进入文件系统目录:cd Buildroot_2019.02
- 清除:make clean
- 编译配置文件: make 100ask_imx6ull-nfs_defconfig
- 编译文件系统:make all
- 将 Buildroot_2019.02/output/image文件夹下的rootfs.tar文件解压到nfs文件目录下
四、设置bootloader启动参数
- 设置nfs服务器ip:setenv serverip 192.168.31.111
- 设置开发板自己ip:setenv ipaddr 192.168.31.100
- 设置nfs路径:setenv nfsroot /home/book/nfs_rootfs,vers=3
- 保存参数:saveenv
- 启动:run netboot
五、实验一个简单的linux驱动
- 拷贝源码:01_hello_drv
- 编译:make
- 加载驱动:insmod hello_drv.ko
- 运行驱动:./hello_drv_test
- 测试驱动(写): ./hello_drv_test -w hello world !
- 测试驱动(读):./hello_drv_test -r
注意如果终端无法打印printk中的内容则运行命令:echo 8 > /proc/sys/kernel/printk