韦东山Linux教学视频中的makefile文件详细介绍

这篇具有很好参考价值的文章主要介绍了韦东山Linux教学视频中的makefile文件详细介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

(1)在学习韦东山Linux教学视频的时候,他的makefile并没有做详细的介绍。以至于我学了很长时间对他的makefile文件不理解。所以本文将会详细介绍韦东山Linux教学视频中的makefile文件含义。
(2)注意:我使用的是韦东山的配套i.max6ull pro开发板。如果是其他系列开发板,makefile文件的KERN_DIR = 需要改成你的Linux内核路径。
(3)阅读本文之前,需要具备一定的makefile语法基础,如果没有,请先学习Linux-GCC介绍+入门级Makefile使用的Makefile介绍部分。
(4)强调:我这里只是帮助各位理解韦东山老师的makefile文件是什么意思,保证你看完之后能够对这个文件进行更改,但是不保证你能够自己从0写一个makefile。

韦东山makefile文件源代码

以下是韦东山老师的makefile文件,我加了一些注释。


# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
# 2.1 ARCH,          比如: export ARCH=arm64
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
# 2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
#       请参考各开发板的高级用户使用手册

# 内核源码路径
KERN_DIR = /home/book/100ask_imx6ull-sdk/Linux-4.9.88

all:
	# -C表示将当前的工作目录切换到指定目录中,也就是Linux内核源码路径
	# M=表示模块源码目录
	# pwd表示获取当前文件路径,因为makefile一般和模块源码在同一个路径,所以这里可以直接使用pwd指令
	# modules表示编译模块
	make -C $(KERN_DIR) M=`pwd` modules 
	# 将ledtest.c 编译成开发板能够执行的可执行文件ledtest
	$(CROSS_COMPILE)gcc -o ledtest ledtest.c 

clean:
	# 将模块清空	
	make -C $(KERN_DIR) M=`pwd` modules clean
	# 清除过度文件modules.order,这句话没有用处,上一句也会清除modules.order文件
	rm -rf modules.order
	# 删除可执行文件ledtest
	rm -f ledtest

# 参考内核源码drivers/char/ipmi/Makefile
# 要想把a.c, b.c编译成ab.ko, 可以这样指定:
# ab-y := a.o b.o
# obj-m += ab.o

# make工具根据名字将.c编译成.ko模块
obj-m += leddrv.o chip_demo_gpio.o


前期准备工作—设置交叉编译工具链

(1)因为开发板和电脑端的架构是不一样的。所以他们的可执行文件是不同的,在电脑端能够运行的可执行文件,开发板是跑不了的,反之同理。
(2)为了能够让我们编译出开发板能够执行的可执行文件,就需要先设置交叉编译工具链。
(3)如果是跟着韦东山老师的视频课程的来的,教程编译工具链应该是永久配置好的。(详情可看嵌入式Linux应用开发完全手册V5_IMX6ULL_Pro开发板,第三篇环境搭建与开发板操作,2.6.3节配置交叉工具链)
(4)因为韦东山老师的文档对交叉工具链配置已经很详细了,所以我不再赘述。这里只是会讲解如何查看自己是否永久配置好交叉工具链。
(5)打开终端,输入指令: vim ~/.bashrc

韦东山Linux教学视频中的makefile文件详细介绍,Linux,linux

(6)
<1>进入VIM编辑器之后,输入: /PATH
<2>如果能够跳转,并且找到如下图的三行文字,就表示交叉工具链已经被配置好了。如果没有进行跳转,说明没有被配置好。

韦东山Linux教学视频中的makefile文件详细介绍,Linux,linux

(7)如果没有配置好交叉编译工具链,就在命令行输入如下三行指令。(注意,如果是韦东山配套的i.max6ull就是执行这个。其他的板子请自行寻找你的交叉工具链配置方法)

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihfexport- 
PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

代码详细介绍

KERN_DIR = …介绍

(1)这一句是进行赋值操作,我们会发现,这个makefile中还有其他的KERN_DIR 。
(2)这个就相当于C语言的赋值,a = 3。那么此时变量a就是3了,后面只要出现字符a,并且字符a没有再次赋值,那么a就是代表数字3。
(3)这个是用来指定Linux的内核路径的。因为我们编译文件,需要使用到Linux库函数,所以需要指定Linux路径。

KERN_DIR = /home/book/100ask_imx6ull-sdk/Linux-4.9.88

all:介绍

(1)如果有makefile 的基础概念知识,就知道这是一个判断语句。
(2)因为all:是第一个判断语句,而且all永远不存在,所以只要在终端执行make指令,就会执行all:下面的指令。

all:
[TAB]命令

make -C $…介绍

(1)-C表示将当前的工作目录切换到指定目录中,也就是Linux内核源码路径。因为我们需要调用Linux内核库函数。
(2)M=表示模块源码目录,也就是我们写的驱动.c文件。
(3)这里的’pwd’效果和在终端执行pwd指令效果是一样的,都是获得当前文件路径。为makefile一般和模块源码在同一个路径,所以这里可以直接使用pwd指令。
(4)最后面的modules表示编译模块

make -C $(KERN_DIR) M=`pwd` modules 

韦东山Linux教学视频中的makefile文件详细介绍,Linux,linux

$(CROSS_COMPILE)gcc … 介绍

(1)看到这一段代码,可能有些人会有疑惑,CROSS_COMPILE是什么东西?代码里面没有出现过这个玩意啊。
(2)CROSS_COMPILE就是我们在配置交叉编译工具链的时候设置的玩意。 export CROSS_COMPILE = arm-buildroot-linux-gnueabihf- ,所以说,CROSS_COMPILE就是arm-buildroot-linux-gnueabihf- 。那么$(CROSS_COMPILE)gcc就是arm-buildroot-linux-gnueabihf-gcc,看到这,大家是不是熟悉起来了。没错,就是编译开发板能够执行的可执行文件。
(3)所以这句话就是让应用层的.c文件编译成开发板能够执行的可执行文件。

$(CROSS_COMPILE)gcc -o ledtest ledtest.c 

clean: 介绍

这个其实是makefile基础知识,如果我们在命令行输入make clean。就会执行clean:下面的命令。

make -C $(KERN_DIR)…介绍

这个指令就是删除产生的.ko文件,.o文件,过渡文件modules.order等东西。

make -C $(KERN_DIR) M=`pwd` modules clean

rm -rf modules.order介绍

清除过渡文件modules.order,这句话没有用处,make -C $(KERN_DIR) M=pwd modules clean也会清除modules.order文件

rm -rf modules.order

rm -f ledtest介绍

这个就是删除开发板的可执行文件ledtest

rm -f ledtest

obj-m += …介绍(重点!!!)

(1)make工具根据名字将.c编译成.ko模块。例如,leddrv.c就会被识别到,编译成leddrv.ko。chip_demo_gpio.c就会被识别到,编译成chip_demo_gpio.ko。

obj-m += leddrv.o chip_demo_gpio.o

(2)为了加深理解,如果我们讲chip_demo_gpio.o稍微改一下。假如我们不小心少些了一个o,把chip_demo_gpio.o写成了chip_demo_gpi.o会发送什么呢?

韦东山Linux教学视频中的makefile文件详细介绍,Linux,linux

如何根据自身需求更改这个makefile

(1)首先,我们需要知道自己的内核源码路径。然后将自己的内核源码路径更改一下。
(2)根据自己要编译成模块的.c文件名字来在obj-m +=写数据。比如我们想让SR04.c文件编译成SR04.ko模块。obj-m += SR04.o这样写即可。

韦东山Linux教学视频中的makefile文件详细介绍,Linux,linux文章来源地址https://www.toymoban.com/news/detail-579546.html

到了这里,关于韦东山Linux教学视频中的makefile文件详细介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux(基础IO、文件权限、Makefile)

    目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简单操作 安装中文包 使用三种方式查询open接口的详

    2024年02月11日
    浏览(50)
  • Github如何使用详细介绍(保姆级教学)

    目录 一、Github如何搜索 二、如何判断一个项目好不好呢? 三、项目的详细介绍 1、Code项目页 2、issues页面 3、pull request页面 4、Action页面 5、Security页面 6、Insights页面 四、导航栏的详细介绍 1、Explore探索 2、Marketplace市场 3、Codespaces代码空间 例如搜索:“Java教学”不用登录即

    2024年02月03日
    浏览(40)
  • 【音视频 | Ogg】libogg库详细介绍以及使用——附带libogg库解析.opus文件的C源码

    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍libogg库,并给出ligogg库使用的例子🍭 😎金句分享😎:🍭子曰:不患人之不己知,患不知人也。——《论语·学而篇》。意思是,

    2024年02月05日
    浏览(68)
  • 【linux基础(七)】Linux中的开发工具(下)--make/makefile和git

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到开通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 如果你不知道什么是vim和gcc 请先阅读这两篇文章后再学习本节: 文章一: vim和yum 文章二: gcc/g++ 本章重点: 本篇文章会着重讲

    2024年02月08日
    浏览(36)
  • Redis的简介,安装(Linux、Windows),配置文件的修改---详细介绍

    Redis是一个基于 内存 的key-value结构数据库。 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 1.1、Redis简介 The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.(开源内存数据存储,被数百万

    2024年02月13日
    浏览(52)
  • 浅谈linux中的根文件系统(rootfs的原理和介绍)【转】

    浅谈linux中的根文件系统(rootfs的原理和介绍)【转】 转自:https://www.cnblogs.com/sky-heaven/p/13742173.html linux中有一个让不少初学者都不是特别清楚的概念,叫作“根文件系统”。我接触linux前先后后也好几年了,可是对这个问题,至今也不是特别的清楚,至少无法给出一个很全面

    2024年01月21日
    浏览(89)
  • Linux驱动1:入口与出口、头文件路径、makefile编译

    目录 Linux 驱动两种运行方式 字符设备驱动框架 1、创建目录和编写文件 2、添加头文件路径 3、Makefile编写和解释 4、编译测试 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序; 第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),

    2024年02月10日
    浏览(44)
  • 韦东山老师 RTOS 入门课程(一)RTOS 介绍,熟悉裸机的汇编逻辑

    课程链接:韦东山直播公开课:RTOS实战项目之实现多任务系统 第1节:裸机程序框架和缺陷_哔哩哔哩_bilibili 裸机:固定顺序执行。 中断:可以一直专心做循环里的事情,直到触发中断。也可以中断里设立 flag 在循环里检测执行,防止中断超时。 定时器:太多个任务的时候不

    2024年02月12日
    浏览(37)
  • Linux中的工具:yum,vim,gcc/g++,make/makefile,gdb

    目录 1、yum 1.1 查看软件包:  1.2 安装软件包 1.3 卸载软件 2、vim 2.1 vim的三种模式 2.2 vim的基本操作 2.3. vim正常模式命令集 2.3.1 插入模式 2.3.2 移动光标 2.3.3 删除文字 2.3.4 复制 2.3.5 替换 2.3.6撤销上一次操作 2.3.7 更改 2.3.8 跳至指定的行 2.4. vim末行模式命令集 3、gcc/g++ 3.1 预处理

    2024年02月10日
    浏览(46)
  • [Linux][环境配置][yum][vim][gcc/g++][gdb][makefile][git]详细讲解

    本篇文章以Centos为例 通过 yum list 命令可以罗列出当前一共有哪些软件包,由于包的数目可能非常之多, 使用 grep 命令只筛选出我们关注的包 yum list | grep sl 注意事项: 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构 “x86_64” 后缀表示64位系统

    2024年04月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包