1.环境搭建
环境搭建内容比较繁琐,建议查看韦东山老师的环境搭建教程。
百问网嵌入式专家-韦东山嵌入式专注于嵌入式课程及硬件研发 (100ask.net)
2.编译内核目的
为什么编译驱动程序之前要先编译内核?
⚫ 驱动程序要用到内核文件:比如驱动程序中这样包含头文件: #include <asm/io.h>,其中的 asm 是一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成asm 这个链接文件。
⚫ 编译驱动时用的内核、开发板上运行到内核,要一致:开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己编译出来到内核放到板子上去,替代原来的内核。
⚫ 更换板子上的内核后,板子上的其他驱动也要更换:板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、 模块,并且放到板子上去。
3.在ubuntu中编译内核的步骤(其中/home/book/..是自己的内核路径,源码git下载在韦东山老师的资料中心)
cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88
make mrproper
make 100ask_imx6ull_defconfig
make zImage -j4
make dtbs
3.2 将编译好的内核文件放入虚拟文件系统(给开发板使用)
cp arch/arm/boot/zImage /home/book/nfs_rootfs
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb /home/book/nfs_rootfs
3.3.编译安装内核模块
cd ~/100ask_imx6ull-sdk/Linux-4.9.88/
make modules
3.4安装内核模块到nfs文件目录
make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
4.安装内核和模块到开发板
#挂载网络文件系统
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
#拷贝文件到boot目录
cp /mnt/zImage /boot
cp /mnt/100ask_imx6ull-14x14.dtb /boot
cp /mnt/lib/modules /lib -rfd
sync
#重启开发板
reboot