> 文章列表 > IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot

IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot

IMX6ULLPRO单独编译kernel+dtb内核模块以及uboot

目录

为什么编译驱动程序之前要先编译内核

驱动程序要用到内核文件

编译内核

编译安装内核模块

编译内核模块

安装内核模块到 Ubuntu 某个目录下备用

 安装内核和模块到开发板上

 Bootloader 介绍

编译 u-boot 镜像


为什么编译驱动程序之前要先编译内核?

驱动程序要用到内核文件:

比如驱动程序中这样包含头文件: #include <asm/io.h> ,其中的 asm 是 一个链接文件,指向 asm-arm asm-mips ,这需要先配置、编译内核才会生成 asm 这个链接文件。
编译驱动时用的内核、开发板上运行到内核,要一致:
开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译 的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己 编译出来到内核放到板子上去,替代原来的内核。
更换板子上的内核后,板子上的其他驱动也要更换:
板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出 来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且放到板子上去。

编译内核

不 同 的 开 发 板 对 应 不 同 的 配 置 文 件 , 配 置 文 件 位 于 内 核 源 码 arch/arm/configs/目录。 kernel 的编译过程如下:
make mrproper
make 100ask_imx6ull_defconfig
make zImage -j4
make dtbscp arch/arm/boot/zImage /home/book/nfs_rootfscp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb  /home/book/nfs_rootfs
编译完成 zImage 后才可编译设备树文件。
编译完成后生成的文件如图 5.2 所示:
编译完成后,在 arch/arm/boot 目录下生成 zImage 内核文件 , 在 arch/arm/boot/dts 目录下生成设备树的二进制文件 100ask_imx6ull- 14x14.dtb 。把这 2 个文件复制到 /home/book/nfs_rootfs 目录下备用,如图 5.3:

编译安装内核模块

编译内核模块

进入内核源码目录后,就可以编译内核模块了
make ARCH=arm CROSS_COMPILE-arm=buildroot-linux-gnueabihf-modulese
内核模块编译完成后如图

安装内核模块到 Ubuntu 某个目录下备用

可以先把内核模块安装到 nfs 目录 (/home/book/nfs_rootfs)
执行以下命令安装模块:
sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
把模块安装在 nfs 目录“ /home/book/nfs_rootfs/ ”下:

 安装好驱动后的/home/book/nfs_rootfs/目录结构如图 5.6 所示:

 安装内核和模块到开发板上

假设:在 Ubuntu /home/book/nfs_rootfs 目录下,已经有了 zImage 、 dtb 文件,并且有 lib/modules 子目录 ( 里面含有各种模块 )
接下来要把这些文件复制到开发板上。假设 Ubuntu IP 192.168.5.11 , 在开发板上执行以下命令:

 

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs/ /mnt
cp /mnt/zImage /boot
cp /mnt/100ask_imx6ull-14x14.dtb /boot
cp /mnt/lib/modules /lib -rfd
sync //同步
lsmod //查看内核模块

 Bootloader 介绍

Bootloader 是在操作系统运行之前运行的一段代码,用于引导操作系统。
通常每个操作系统都有一组专属的引导加载程序。引导加载程序通常可以通过多
种方式引导操作系统内核,还有各种命令用于调试或修改内核运行环境。
U-Boot 是一个开源的主引导加载程序,用于引导设备的操作系统内核,并
含有多种命令以便调试系统。它适用于多种计算机体系结构,包括 68k ARM
Blackfin MicroBlaze MIPS Nios SuperH PPC RISC-V x86
U-boot 官网:
https://www.denx.de/wiki/U-Boot
源码下载页面:
http://ftp.denx.de/pub/u-boot/
NXP 官方 uboot 源码 Git 地址:
https://source.codeaurora.org/external/imx/uboot-imx
本开发使用的 U-boot 位于 Git 仓库,地址为:
https://e.coding.net/weidongshan/imx-uboot2017.03.git
注意 我们使用的版本针对板子进行过修改, u-boot 官网下载的源码不能直接使用。

编译 u-boot 镜像

不同的开发板对应不同的配置文件,配置文件位于 u-boot 源码的 “configs/ ”目录。对于 IMX6ULL Pro 版, u-boot 的编译过程如下 ( 编译 uboot 前必须先配置好工具链等开发环境)
cd /home/book/100ask_imx6ull-sdk
book@100ask: ~/100ask_imx6ull-sdk$cd Uboot-2017.03
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make distclean
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig 
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make -j4
6.1 编译镜像文件为具体的执行步骤:

编译完成后生成的文件如图 6.2 所示。

 编译完成之后生成 u-boot-dtb.imx,可以烧在 TF 卡、EMMC 上。以下命令是将

u-boot-dtb.imx 文件烧写到 EMMC 上:
cp u-boot-dtb.imx /home/book/nfs_rootfscp /mnt/u-boot-dtb.imx  .
echo 0 > /sys/block/mmcblk1boot0/force_ro //取消读写保护
dd if=u-boot-dtb.imx of=/dev/mmcblk1boot0 bs=512 seek=2
echo 1 > /sys/block/mmcblk1boot0/force_ro //恢复读写保护