一、准备工作:
①确保你的Ubuntu下载安装了软件,比如ssh和nfs服务,确保Ubuntu能够ping通外网
②将含有u-boot、kernel和rootfs和工具链的压缩文件拷贝Ubuntu(最好在线使用git下载,不然可能不是最新的)
二、解压编译Bootloader
Bootloader介绍:Bootloader是在操作系统运行之前运行的一段代码,用于引导操作系统。通常每个操作系统都有一组专属的引导加载程序。引导加载程序通常可以通过多种方式引导操作系统内核,还有各种命令用于调试或修改内核运行环境。
U-Boot是一个开源的主引导加载程序,用于引导设备的操作系统内核,并含有多种命令以便调试系统。它适用于多种计算机体系结构,包括68k,ARM,Blackfin,MicroBlaze,MIPS,Nios,SuperH,PPC,RISC-V和x86
补充:bootloader 与 uboot的区别:
BootLoader是嵌入式设备中用来启动操作系统内核的一段程序。
uboot(universal(普遍的) bootloader)是一种可以用于多种嵌入式CPU的BootLoader程序,换言之,uboot是bootloader的一个子集。
uboot的核心作用就是启动操作系统内核,uboot的本质就是一段裸机程序。
编译u-boot镜像:
补充: 不同的开发板对应不同的配置文件,配置文件位于u-boot源码的configs/目录下
①解压含有u-boot、kernel和rootfs和工具链的压缩文件(解压缩时请不要用sudo 命令,否则后面编译会有一系列错误发生)
7z x 100ask_imx6ull-sdk.7z
解压查看100ask_imx6ull-sdk中有如下文件
如果没有 7z命令,执行以下命令下载安装
sudo apt-get install p7zip
②
cd Uboot-2017.03 //进入Uboot-2017.03目录 make distclean //清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件,同时也将configure生成的文件全部删除掉,包括Makefile文件 make mx6ull_14x14_evk_defconfig //通过make指定配置文件,在Uboot-2017.03/configs目录下 make
过程:
编译完成后生成的文件如下图所示
编译完成之后生成u-boot-dtb.imx,可以用于TF和EMMC启动
三、编译Linux kernel(内核)
①编译内核
cd Linux-4.9.88 make mrproper //删除之前编译所生成的文件和配置文件,备份文件 make 100ask_imx6ull_defconfig //指定配置文件 make zImage -j4 //配置内核镜像 make dtbs //配置设备树 cp arch/arm/boot/zImage ~/nfs_rootfs //将内核镜像拷贝到板子挂载的文件夹中备用 cp arch/arm/boot/dts/100ask_myir_imx6ull_mini.dtb ~/nfs_rootfs
编译完成后,在arch/arm/boot目录下生成zImage内核文件, 在arch/arm/boot/dts目录下生成设备树的二进制文件100ask_imx6ull-14x14.dtb
②编译内核模块
进入内核源码目录后,就可以编译内核模块了
cd ~/100ask_imx6ull-sdk/Linux-4.9.88/ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules //编译内核模块
没出现错误即为成功
③安装内核模块到Ubuntu某个目录下备用
cd ~/100ask_imx6ull-sdk/Linux-4.9.88/ sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install //安装内核模块到/home/book/nfs_rootfs目录下备用
④确认开发板挂载Ubuntu目录成功之后,执行一下命令
cp /mnt/zImage /boot cp /mnt/*.dtb /boot cp /mnt/lib/modules /lib -rfd
重启开发板,它就可以使用新的zImage、dtb、内核模块了
四、用Buildroot构建根文件系统
补充:
Buildroot是由Makefile脚本和Kconfig配置文件构成的,对于构建内核、u-boot,它是需要写好脚本,从芯片厂家提供的下载链接,下载 对应的内核、u-boot,然后按照Makefile脚本等配置文件来实现对内核、u-boot的移植。buildroot唯一通过自身代码实现的就是构建根文件系统
①
cd Buildroot_2020.02.x make clean //清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件 make 100ask_imx6ull_pro_ddr512m_systemV_qt5_defconfig //指定配置文件 make all //all这个伪目标是所有目标的目标,其功能一般是编译所有的目标
编译时间很长,大概四五个小时,Be patient.
②编译完成的部分反馈
编译成功后文件输出路径为 output/images
Buildroot编译完成之后生成的rootfs.tar.bz2,可以解压之后放到NFS服务器上作为NFS ROOT文件系统供开发板使用。使用NFS文件系统,便于程序的开发调试。所谓NFS服务器,就是我们在VMWare上运行的Ubuntu。



