程序编译网站-【纯实用资料】五分钟带你看完Linux编译驱动、内核和应用

作为一个嵌入式Linux新手,在学习过程中会遇到很多问题。 驱动写好后如何编译? 如何加载到内核中?本文将介绍嵌入式Linux开发的一些基本入门操作,让您逐步掌握编译驱动程序、内核和应用程序。

小王是一个刚刚接触Linux的新手。 读了一些Linux驱动方面的书籍后,他购买了一块Cortex-A9 ARM开发板,准备干一番大事。 我编写了第一个驱动程序并将其命名为hellodrv.c。 程序源码如下。

如何将这个驱动编译成可以在板子上运行的程序呢? 经过网上查资料,小王发现需要一个交叉编译工具链。 小王在光盘信息中找到了交叉编译工具,并按照说明正确安装了交叉编译工具。 。

1.安装交叉编译工具

1编译Makefile

小王编译的驱动是hellodrv.c。 要将驱动程序编译成模块,请在同一目录中创建一个新的 Makefile。 编写的Makefile如下。

2 驱动编译

经过小王询问,编译驱动的方式主要有两种。 一是修改内核源代码顶层目录下的Makefile文件。 另外,还可以在编译命令中指定架构和交叉编译工具。

1.修改Makefile

例如:Linux内核源代码的目录是/home/vmuser/kernel-imx。 打开该目录下的Makefile,找到相关词句ARCH和CROSS_COMPILE,修改为如下词句。

如果交叉编译工具链没有设置环境变量,则CROSS_COMPILE设置为交叉编译工具链的绝对路径,设置如下。

修改后直接执行make命令生成hellodrv.ko文件。

2.在编译命令中指定

执行以下命令进行编译。

这种方法也可以生成hellodrv.ko,但是驱动程序依赖于内核才能在其上运行程序编译网站,于是小王开始配置和编译Linux内核。

2.Linux内核配置与编译

编译内核时指定体系结构和交叉编译工具的形式与编译模块相同。 经过前面的操作,小王已经熟悉了。 小王还学会了如何先导入环境变量,然后编译。

第一次编译配置前,需要清除之前编译生成的文件。 您可以使用以下命令来清理它们。

接下来,配置内核。 您可以使用以下命令之一来配置内核。

这四种形式中,make menuconfig值得推荐。 它不依赖于QT或GTK+并且非常直观。 使用make menuconfig命令后,将进入如图1所示的界面,在这里您可以根据需要定制需要编译到内核中的选项。 对于bool类型选项,按Y或N决定是否编译到内核中。 [*]表示已选择,[]表示未选择。 对于tristate选项,根据需要有Y、M、N三种选择,分别表示静态编译​​、编译成模块、不编译进内核。

图1 内核配置界面

配置完成后,选择“保存”,然后退出。 配置完成后,会生成一个.config文件,该文件保存了配置信息,供Makefile编译内核时使用。

在配置界面中,我们根据需要配置所需的功能和相应的设备驱动支持,然后编译内核和设备树。 使用以下命令编译内核和设备树。

为了提高编译速度,可以在编译命令后添加“-j”选项。 例如,如果PC的CPU是4核,则编译命令如下。

如果要将单个驱动程序编译为模块,请使用以下命令。

对于相应的开发板,厂家通常都有默认配置。 这些配置文件位于内核源代码 arch/arm/configs 目录中。 例如:使用以下默认配置。

如果已有.config文件,可以使用以下命令加载已有的.config配置文件。

内核和设备树编译完成后,会生成zImage和对应的dtb文件。 按照厂家提供的烧录方法将镜像烧录到目标板上。

3. 应用程序编译和文件传输

1应用程序编译

例如需要编译的应用程序文件是test.c,需要在arm开发板上编译并运行该程序。 编译命令如下。

这是一个非常简单的程序,只有一个文件,直接输入命令就可以交叉编译。 如果项目很大,不建议采用这种方法。 通常需要编译一个Makefile并通过make程序来管理项目。 该应用程序的 Makefile 示例如下。

编写Makefile后,执行make命令生成目标文件test。

2文件传输

编译生成的可执行文件可以通过TFTP、NFS等方式下载到开发板。关于PC上TFTP、NFS服务器的建立,请参考网上相关文章,这里不再赘述。

1.NFS文件传输

将目标板连接到局域网或通过交叉网线连接到PC主机,设置目标板的IP,使其与主机在同一公网,然后进行远程挂载操作。 将需要传输的文件放置在PC上搭建的NFS服务器目录下。 在开发板上进行以下操作。

远程挂载前最好使用ping命令检查网络通讯是否正常。 只有能够ping通,才能正常挂载。 否则请检查网络。 如果远程挂载时即使ping通但仍出现错误,请检查主机和目标机的其他设置。

2.TFTP文件传输

将需要传输的文件放置在PC机的tftp服务器目录下。 TFTP下载命令格式如下。

例如:下载IP地址192.168.1.168的tftp服务器的hellodrv.ko文件,并在开发板当前目录下执行以下命令。

使用上述任一方法将PC上编译的驱动模块hellodrv.ko和测试应用程序复制到目标板上。

4. 驱动模块的加载和删除

执行以下命令将驱动模块动态加载到内核中。

要查看加载的模块,请使用以下命令。

如果需要删除模块,请使用以下命令。

IoT9000A-LI是广州致远电子有限公司研发的基于M6708-T系列核心板的ARM工控主板,核心板标配处理器为i.MX 6U、Cortex-A9简易四核。 该板集成了大量的外围接口,包括100M以太网、音频、USB、HDMI、LVDS、LCD、miniPCIE、摄像头、CAN信号、UART信号等插座。 同时程序编译网站,集成的多功能高清视频引擎可提供1080P 60fps视频解码、1080P 30fps视频编码,2D和3D图形引擎可满足消费电子、工业和车辆车载等新一代应用的需求娱乐系统,以及丰富的图形和高响应要求的医疗应用。

图2 IoT9000A_LI产品图

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 程序编译网站-【纯实用资料】五分钟带你看完Linux编译驱动、内核和应用 https://www.wkzy.net/game/200715.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务