【linux-3编译内核和程序烧写】【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通

【linux-3编译内核和程序烧写】【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通

编译内核和程序烧写

一.编译和替换内核 (1).驱动程序依赖于内核 (2).为什么编译驱动程序需要先编译内核 [1].驱动程序头文件需要用到内核文件 [2].编译驱动时用到的内核需要和开发板上运行的内核一致 [3].更新板子上的其他驱动为新编译出来的驱动

(3) 编译驱动程序的步骤 [1].编译内核 [2].编译内核模块 [3].安装内核模块到ubuntu某个目录下 [4].将安装的内核放入板子中 [5].编译驱动程序 [6].测试程序

二.构建系统和烧写系统(根文件系统)--BOOTLOADER和内核构建以后补充 (1).配置文件说明 (2).编译系统 (3).烧写系统 [1].设置启动方式 [2].连接并配置ubuntu [3].使用烧录工具进行烧写

一.编译和替换内核

(1).驱动程序依赖于内核

驱动程序中这些头文件来自内核,所以驱动程序依赖于内核。

编译驱动程序的前提:

1.在编译驱动程序前,需要有内核的源码. 2.要事先编译和配置这个内核的源码,且内核源码必须编译过才能编译这个驱动程序.

(2).为什么编译驱动程序需要先编译内核

主要是三点原因:

[1].驱动程序头文件需要用到内核文件

头文件中有asm链接文件时,需要确定指向的具体架构(ARM还是x86)。 此时需要去配置内核才能确定具体的架构并且才能生成asm这个链接文件

asm链接文件如下所示

asm链接文件

[2].编译驱动时用到的内核需要和开发板上运行的内核一致

开发板上运行的内核是出厂时烧录的,编译的驱动时自己编译的,两个不能不一致,否则会出错 为了防止这个错误,需要将配置编译后的内核替换掉原来的内核

[3].更新板子上的其他驱动为新编译出来的驱动

也就是在编译驱动程序前,需要编译内核,模块,并放到板子上才能运行驱动程序

(3) 编译驱动程序的步骤

大致可以分为三个步骤

STEP1:编译配置内核,设备树,驱动 STEP2:将编译内核放入板子中 STEP3:编译测试驱动

详细步骤如下:

[1].编译内核

A.逐个执行以下命令,来编译内核

cd /home/book/100ask_imx6ull-sdk

cd linux-4.9.88

make mrproper

make 100ask_imx6ull_defconfig //配置内核架构

make zImage -j4 //编译内核

make dtbs //编译设备数

cp arch/arm/boot/zImage ~/nfs_rootfs //内核拷贝到nfs备用

cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs //设备树拷贝到nfs备用

编译命令如下图所示

编译过程

B.编译后的拷贝操作

[2].编译内核模块

编译内核模块的命令

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/

make modules //编译内核模块

编译内核模块命令和完成图

[3].安装内核模块到ubuntu某个目录下

A.安装tree的命令

sudo apt install tree

B.安装模块的命令

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/

sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install

安装内核模块的命令如下图所示

[4].将安装的内核放入板子中

A.查看板子上的当前linux内核版本

B.挂载内核到开发板的命令

挂载内核到开发板的指令如下图所示

mount -t nfs -o nolock,ver=3 192.168.5.11:/home/book/nfs_rootfs /mnt

C.将文件复制到开发板,并进行重启,就可以使用新的zimage和dtb模块了(更新了内核和设备树)

复制到开发板的命令如下所示

cp /mnt/zImage /boot //复制内核到开发板

cp /mnt/*.dtb /boot //复制设备树到开发板

cp /mnt/lib/modules /lib -rfd //将linux内核文件覆盖开发板的内核文件 d表示链接文件按照链接文件复制

sync //进行同步(漏掉的,拷贝之后还在内存里,执行这个命令将内存里的数据强制刷到flash)

D.再次查看板子上的当前linux内核版本

再次检查内核版本如下,检查如果和新编译的内核版本一致,那么则成功

[5].编译驱动程序

A.将驱动程序通过filezila 从pc传给ubuntu

放入ubuntu的nfs 目录里,然后在pc端进行上传

B.修改驱动程序里的makefile

1.复制当前linux内核目录路径,然后来修改makefile

2.修改修改的路径位置如下(stm32mp157的内核路径修改位置也是这里),将刚才复制的路径填入即可

3.通过make 来编译驱动程序(drv.ko-驱动程序,hello_drv_test是测试程序)

[6].测试程序

1.启动开发板之后,挂载nfs文件系统,并且切到生成的驱动文件目录进行驱动的挂载

如果没有内核打印的话按照以下方式打开

检查驱动挂载是否成功

检查设备节点是否打开,如下所示已经打开

检查驱动程序是否运行

检查正在运行的程序命令

在列出的程序中找的了已装载并运行的hello驱动,表示hello驱动程序运行成功

2.运行驱动测试程序

二.构建系统和烧写系统(根文件系统)–BOOTLOADER和内核构建以后补充

(1).配置文件说明

(2).编译系统

配置buildroot生成文件系统过程

1.配置buildroot的代码

cd /home/book/100ask_imx6ull-sdk

cd Buildroot_2020.02.x

make clean

make 100ask_imx6ull_pro_ddr512m_systemV_qt5_defconfig

make all -j4

编译完成之后的显示

2.编译后生成的文件,uboot,内核(zImage),设备树(dtb),文件系统(ext4)

文档介绍的生成的文件

3.作用:下面所述的系统镜像可以放入烧写工具进行烧写

(3).烧写系统

[1].设置启动方式

如下图所示,可以设置不同的启动方式,本例采用usb启动方式

A.USB模式的作用

B.USB启动的注意事项,要先设置启动方式,再去连接usb otg口

C.usb otg的实现

1.pc的烧录工具会利用usb otg接口将uboot传输给板子上固件模拟出来的默认usb设备 2.默认的usb设备会将传过来的uboot下载到板子上并运行(在内存运行)

3.uboot 利用otg模拟出download设备。 4.uboot利用这个模拟download设备和usb otg口接受和烧写文件,烧写到emmc或者sd卡.

[2].连接并配置ubuntu

连接usb otg线之后ubuntu的配置

选择错误则点击断开即可

检查是否有usb驱动,如下就是有驱动设备

如果没有则需要安装驱动程序

[3].使用烧录工具进行烧写

烧录工具路径如下:

烧录工具文件名

1.模拟usb download设备的生成方法,按下图所示

A.如果故意连接到虚拟机

会导致usb驱动是虚拟的usb 设备驱动,根本无法使用

无法将固件烧录到emmc中,打开usb 虚拟download设备失败,因为设备被虚拟机接管了

B.修改这个错误的方法

首先忘记之前的设置,开发板重新上电 重新下载uboot,用uboot模拟新的usb设备 重新设置usb设备的连接 正确的显示,显示之后需要重新上电

3;搬运要烧录的文件到pc

烧写目录详解,确认哪些需要搬到烧写工具进行烧录,img,boot,zimage 用filezila搬到pc 烧写前需要改为emmc.img(烧写到emmc),烧写到sdcrad(改为sdcard.img) 用工具烧写

4.烧写成功显示

5.此时设置板子为emmc启动,重新上电,则使用新的系统进行启动

新的内核名称表示成功 检查内核是否一致,此为开发板内核 下图为ubunut内核,对比发现一致,则烧写成功

6.使用qt文件进行验证

1 lvgl的文件,使用命令移到上册目录 2.qt 文件 3.然后reboot重启系统,即可看到llvgl的界面 界面如下图所示

相关推荐

时间管理软件真的能提升效率吗?5款工具测评推荐
施耐德、罗格朗、西门子、ABB开关插座测评|一线品牌的代工开关能不能买?
世界杯小组赛综述:点球判罚明显增多 红牌数量减少 VAR走上了舞台