kernel makefile include路径_Linux内核kernel配置2—教你将自己开发的代码加入linux内核中...

上一章节已经讲了makefile、menuconfig、xconfig,本章节给大家精讲一个实例(如果没有看过上章节的建议先进主页学习):

说明:哪位朋友需要完整电子档的在评论区给我说下,本人有时间了一一私发给大家O(∩_∩)O本人近期会陆续上传这些资料和视频教程,可以关注一下互相交流:C C++ Java python linux ARM 嵌入式 物联网等。
e368a03e89575ea730fd50edcca17057.png

4. 实例讲解

对于一个开发者来说,将自己开发的内核代码加入到 Linux 内核中,需要有三个步骤。首先确定把

自己开发代码放入到内核的位置;其次,把自己开发的功能增加到 Linux 内核的配置选项中,使用

户能够选择此功能;最后,构建子目录 Makefile,根据用户的选择,将相应的代码编译到最终生成

的 Linux 内核中去。下面,我们就通过一个简单的例子--test driver,结合前面学到的知识,来说明

如何向 Linux 内核中增加新的功能。

4.1 目录结构

test driver 放置在 drivers/test/ 目录下:

$cd drivers/test

$tree

.

|-- Config.in

|-- Makefile

|-- cpu

| |-- Makefile

| `-- cpu.c

|-- test.c

|-- test_client.c

|-- test_ioctl.c

|-- test_proc.c

|-- test_queue.c

`-- test

|-- Makefile

`-- test.c

4.2 配置文件

1) drivers/test/Config.in

#

# TEST driver configuration

#

mainmenu_option next_comment

comment 'TEST Driver'

bool 'TEST support' CONFIG_TEST

if [ "$CONFIG_TEST" = "y" ]; then

tristate 'TEST user-space interface' CONFIG_TEST_USER

bool 'TEST CPU ' CONFIG_TEST_CPU

fi

endmenu

由于 test driver 对于内核来说是新的功能,所以首先 创建一个菜单 TEST Driver。然后,显示

"TEST support",等待用户选择;接下来判断用户是否选择了 TEST Driver,如果是

(CONFIG_TEST=y),则进一步显示子功能:用户接口与 CPU 功能支持;由于用户接口功能可

以被编译成内核模块,所以这里的询问语句使用了 tristate(因为 tristate 的取值范围包括 y、n 和

m,m 就是对应着模块)。

2) arch/arm/config.in

在文件的最后加入:source drivers/test/Config.in,将 TEST Driver 子功能的配置纳入到 Linux 内

核的配置中。

c344c9133fbf69f90bc07b536e404a29.png

4.3 Makefile

1)drivers/test/Makefile

# drivers/test/Makefile

#

# Makefile for the TEST.

#

SUB_DIRS :=

MOD_SUB_DIRS := $(SUB_DIRS)

ALL_SUB_DIRS := $(SUB_DIRS) cpu

L_TARGET := test.a

export-objs := test.o test_client.o

obj-$(CONFIG_TEST) += test.o test_queue.o test_client.o

obj-$(CONFIG_TEST_USER) += test_ioctl.o

obj-$(CONFIG_PROC_FS) += test_proc.o

subdir-$(CONFIG_TEST_CPU) += cpu

include $(TOPDIR)/Rules.make

clean:

for dir in $(ALL_SUB_DIRS); do make -C $$dir clean; done

rm -f *.[oa] .*.flags

drivers/test 目录下最终生成的目标文件是 test.a。在 test.c 和 test-client.c 中使用了

EXPORT_SYMBOL 输出符号,所以 test.o 和 test-client.o 位于 export-objs 列表中。然后,根据

用户的选择(具体来说,就是配置变量的取值),构建各自对应的 obj-* 列表。由于 TEST Driver

中包一个子目录 cpu,当 CONFIG_TEST_CPU=y(即用户选择了此功能)时,需要将 cpu 目录

加入到 subdir-y 列表中。

2)drivers/test/cpu/Makefile

# drivers/test/test/Makefile

#

# Makefile for the TEST CPU

#

SUB_DIRS :=

MOD_SUB_DIRS := $(SUB_DIRS)

ALL_SUB_DIRS := $(SUB_DIRS)

Linux内核配置系统浅析

页码,10/12

http://www-900.cn.ibm.com/developerWorks/cn/linux/kernel/l-kerconf/...

2004-7-17L_TARGET := test_cpu.a

obj-$(CONFIG_test_CPU) += cpu.o

include $(TOPDIR)/Rules.make

clean:

rm -f *.[oa] .*.flags

3)drivers/Makefile

……

subdir-$(CONFIG_TEST)

+= test

……

include $(TOPDIR)/Rules.make

在 drivers/Makefile 中加入 subdir-$(CONFIG_TEST)+= test,使得在用户选择 TEST Driver 功能

后,内核编译时能够进入 test 目录。

4)Makefile

……

DRIVERS-$(CONFIG_PLD) += drivers/pld/pld.o

DRIVERS-$(CONFIG_TEST) += drivers/test/test.a

DRIVERS-$(CONFIG_TEST_CPU) += drivers/test/cpu/test_cpu.a

DRIVERS := $(DRIVERS-y)

……

在顶层 Makefile 中加入 DRIVERS-$(CONFIG_TEST) += drivers/test/test.a 和 DRIVERS-

$(CONFIG_TEST_CPU) += drivers/test/cpu/test_cpu.a。如何用户选择了 TEST Driver,那么

CONFIG_TEST 和 CONFIG_TEST_CPU 都是 y,test.a 和 test_cpu.a 就都位于 DRIVERS-y 列

表中,然后又被放置在 DRIVERS 列表中。在前面曾经提到过,Linux 内核文件 vmlinux 的组成中

包括 DRIVERS,所以 test.a 和 test_cpu.a 最终可被链接到 vmlinux 中。

b5bc6a335042ddb3868b2b9eebf2d451.png
RomanGol Liarod
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux 如何改变include路径
职场里拉开差距的不是知识,而是认知!
04-05 1万+
利用系统的环境变量。 对于头文件的搜索路径: C_INCLUDE_PATH=; export C_INCLUDE_PATH 对于库文件的搜索路径: LIBRARY_PATH=; export LIBRARY_PATH 对于链接程序ld使用的库文件搜索路径: LD_LIBRARY_PATH=; export LD_LIBRARY_PATH
makefile 指定include_Makefile路径搜索使用案例
weixin_39976951的博客
12-04 2091
我们了解了一下路径搜索的使用方式,我们再来看一下具体的使用方法。为了体验实例的效果的更加明显,我们按照源代码树的布局来放置文件。我们把源代码放置在src目录下,包含的文件文件是:list1.c、list2.c、main.c 文件,我们把头文件包含在 include 的目录下,包含文件 list1.h、list2.h 文件。Makefile 放在这两个目录文件的上一级目录。我们按照之前的方...
编译linux kernel时,如何增加一个include路径
最新发布
power1952的专栏
07-19 284
就是要增加的include路径。他会被传递给gcc或clang的-I选项,用于添加一个新的include路径。是你的交叉编译器前缀,例如 arm-linux-。是你的目标架构,例如 x86、arm 等。
linux代码_Linux内核kernel配置2—你将自己开发代码加入linux内核
weixin_39979215的博客
11-10 136
上一章节已经讲了makefile、menuconfig、xconfig,本章节给大家精讲一个实例(如果没有看过上章节的建议先进主页学习):说明:哪位朋友需要完整电子档的在评论区给我说下,本人有时间了一一私发给大家O(∩_∩)O本人近期会陆续上传这些资料和视频程,可以关注一下互相交流:C C++ Java python linux ARM 嵌入式 物联网等。4. 实例讲解对于一个开发者来说,将自...
Linux学习笔记——例说makefile 头文件查找路径
热门推荐
物联网 IoT 经验分享
07-02 7万+
0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。     例说makefile大致分为4个部分     1.只有单个C文件     2.含有多个C文件
makefile 路径设置
风声世界的专栏
01-06 2万+
本文转自:http://weihuachao1984.blog.163.com/blog/static/328712862009510105226885/ 开始接触Makefile已经有好几个月了,最近想好好学习学习但是一个简单的问题就卡壳了很简单的一个问题|-- Makefile|-- include|   `-- hello.h`-- src    |-- hello.cpp 
Beginning Linux Programming Third Edition
Tatooine
07-05 3259
作为Linux程序开发员,最好对开发工具和资源的位置有个初步了解。下面简要介绍一下主要的文件夹和应用程序。 应用程序(Applications) 应用程序通常都有固定的文件夹,系统通用程序放在/usr/bin,日后系统管理员在本地计算机安装的程序通常放在/usr/local/bin或者/opt文件夹下。除了系统程序外,大部分个人用到的程序都放在/usr/local下,所以保持/usr的
linux 0.01内核代码.zip
09-15
Linux 0.01内核代码Linux操作系统发展历史上的一个重要里程碑,它标志着Linux项目的开始。这个早期版本的内核是由林纳斯·托瓦兹(Linus Torvalds)在1991年编写的,它是一个相对简单的微内核,主要实现了基本的...
linux 嵌入式 ko 编译到内核,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译...
weixin_32539505的博客
05-03 797
嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译本文选择linux 2.6.35.7版本kernel进行实践。一、linux kernel源码目录分析Kbuild,Kernel Build,管理内核编译的文件Makefilekernel工程的Makefile。arch,体系架构,arch目录下的子目录存放的是不同种类的架构block,块设备,一般是存储设备,存放的块设备...
linux内核 makefile,Linux内核配置编译及Makefile简单分析
weixin_32431435的博客
04-30 697
1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux-注:也可以直接修改顶层MakefileARCH        ?=armCROSS_COMPILE?= arm-linux-2. 加载默认设置:make mini2440_defconfig① make mini2440_config: 将arch/arm/configs目录下的mini2440_def...
编译linux内核生成.ko,linux内核模块编译-通过Makefile重命名.ko文件名和模块名
weixin_42433470的博客
05-01 1155
假设模块的源文件为hello.c,源码如下:#include #include #include #include #include #define HELLO_MAJOR 231#define DEVICE_NAME "HelloModule"static int hello_open(struct inode *inode, struct file *file){printk(KERN_EME...
linux内核目录配置,Linux内核根目录配置文件.config包含了许多宏定义,
weixin_29014939的博客
04-29 1145
一、Linux内核配置系统由三个部分组成,分别是:1、Makefile:分布在 Linux 内核代码根目录及各层目录,定义 Linux 内核的编译规则;2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能;3、配置工具:包括配置命令解释器(对配置脚本使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwind...
kernel makefile 添加自定义include路径_为tvm添加一个新的后端
weixin_32943807的博客
12-04 984
前言我是去年5月份开始接触tvm的,再加上各位大佬都非常活跃,tvm已经更新了N个版本。这是本人在tvm学习的一些总结,能力有限比较浅显,如有大佬发现错误,请及时指出,同时欢迎大佬们交流。关于tvm是什么,以及安装之类的问题,网上已经有很全的信息,这里推荐蓝色大佬的文章,以及tvm的官方网址(ps:幸好当初看的第一篇tvm的文章就是蓝大的,少走了很多弯路,在这里表示感谢>.<):Re...
Makefileinclude
qq_45668408的博客
07-15 444
首先看下面这段makefile 第一次make: 第2次make: 分析整个执行过程:所以第一次make的执行过程就变成: 执行all目标 扩展 all里面可以使用变量A include包含的也可以是makefile,因为是原地替换,如果include的位置在all前面的话,执行的就是其他目标而非all目标 -include -includeinclude唯一的不同:不报警告
内核makefile详解
Bin_Watson的博客
05-23 2509
内核镜像的分类 我们经常能看到内核在编译完成后生产各种映像文件,如:Image 、zImage、bzImage等。 其实最开始出现的是 Image,就一个普通的内核镜像。后来为了节省空间,有了 zImage,进行了压缩可以节省空间。 那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。 几种linux内核文件的区别: 1、vmlinux :编译出来后未压缩最原始
《操作系统原理》实验一:编译新内核并为Linux内核增加系统调用
哆啦一泓的博客
11-27 8960
一、实验目的 1)理解操作系统生成的概念和过程 2)理解操作系统两类用户界面(操作界面,系统调用)概念 二、实验内容 1)在Unbantu或Fedora环境下裁剪和编译Linux内核,并启用新的内核。 2)在Unbantu或Fedora环境下为Linux内核增加1-3 个新的系统调用,并启用新的内核,编写一个应用程序测试新增加的系统调用是否能正确工作。 3)在windows 环境下,利...
Makefile编译原理 make 路径搜索_1
weixin_49303682的博客
02-11 546
但是inc 的文件是我们手误放进去的,所以不是我们想要的结果,那么这种情况怎么办呢?$(OBJS) : %.o : %.c func.h // 为 make 解释器提供搜索路径 :VPATH := $(INC) $(SRC) ,这样make解释器就得到了需要的文件,并根据规则的模式替换,生成了最后的规则。原因:VPATH 只能决定 make 的搜路径,无法决定命令的搜索路径,他对命令没有任何作用,上面得到的编译错误是因为 gcc 在编译.c文件的时候找不到对应的头文件。.c文件到 src文件夹去找。
Makefile编译原理 make 路径搜索_1_makefile include 搜索路径(1)
2401_84010702的博客
04-05 289
(OBJS) : %.o : %.c func.h // 为 make 提供搜索路径 :VPATH := $(INC) $(SRC)$(OBJS) : %.o : %.c func.h // 为 make 提供搜索路径 :VPATH := $(INC) $(SRC)@gcc $(CFLAGS) -o $@ -c $< //为 gcc 命令 提供搜索路径,搜索 func.h:-I $(INC)
Makefile 引用多个 include 路径
weixin_30566111的博客
07-18 2750
LIB=-L/usr/informix/lib/c++ INC=-I/usr/informix/incl/c++ -I/opt/informix/incl/public default: main main: test.cpp gcc -Wall $(LIB) $(INC) -c test.cpp #gcc -Wall $(LIB...
Linux4.4.84内核编译详解:从Makefile到kbuild
通过这些基本概念,我们可以理解Linux内核编译的基本流程:从顶层Makefile开始,配置内核(如通过`menuconfig`),然后根据配置信息编译源代码,生成相应的.o对象文件,最后链接这些对象文件生成内核映像和模块。...
写文章

热门文章

  • 我的世界java版特别卡怎么办_我的世界卡顿延迟怎么办 19315
  • 微信撤回软件安卓版_微信无限时间撤回软件 10208
  • 550w计算机电源,GTX 1080显卡配550W电源够用不?老司机来告诉你如何DIY电脑主机... 7070
  • 菲尼克斯接线端子所有型号_【知识】接线端子型号及分类 4843
  • 凭据分配没有加密oracle_远程桌面连接身份验证错误,又找不到加密Oracle修正 3326

最新文章

  • 图解RocketMQ之生产者如何进行消息重试
  • 在java中根据模板发送xml报文
  • 服务器无线检索文件,golang服务器:如何连续检索多个文件
2024年2篇
2021年147篇
2020年28篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家北京城建绿化玻璃钢花盆郑州铜玻璃钢人物雕塑厂家玻璃钢雕塑设计价格榆社县商场美陈铜仁玻璃钢雕塑厂佳木斯玻璃钢商场美陈吉林景观玻璃钢雕塑报价佛山玻璃钢卡通雕塑价格范围重庆公园玻璃钢雕塑制作玻璃钢雕塑如何长沙欧式玻璃钢雕塑供应商品牌形象玻璃钢卡通熊猫雕塑都匀玻璃钢雕塑厂有哪些湖南步行街玻璃钢雕塑价位江苏玻璃钢广场雕塑厂家酒店玻璃钢雕塑艺术小品苏州定制玻璃钢雕塑玻璃钢景观雕塑价格表珠海玻璃钢樱桃雕塑池州园林玻璃钢雕塑宁夏彩色玻璃钢雕塑定制玻璃钢雕塑园林价格四川玻璃钢花盆价钱鱼群像玻璃钢浮雕雕塑下城区商场美陈布置多少钱玻璃钢雕塑的步骤清远主题玻璃钢雕塑定制做玻璃钢雕塑哪个靠谱安徽商场节庆美陈雕塑厂家舟山户内玻璃钢雕塑价位香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化