下面来看一个综合实例,假设我们要在内核源代码 drivers 目录下为 ARM 体系结构新增如下
用于 test driver 的树型目录:
| --test
   | -- cpu
      | -- cpu.c
   | -- test.c
   | -- test_client.c
   | -- test_ioctl.c
   | -- test_proc.c
   | -- test_queue.c
在内核中增加目录和子目录,我们需为相应的新增目录创建 Makefile 和 Kconfig 文件,而新
增目录的父目录中的 Kconfig 和 Makefile 也需修改,以便新增的 Kconfig 和 Makefile 能被引用。
在新增的 test 目录下,应该包含如下 Kconfig 文件:

 #
# TEST driver configuration
#
menu "TEST Driver "
comment " TEST Driver"
config CONFIG_TEST
bool "TEST support "
config CONFIG_TEST_USER
tristate "TEST user-space interface"
depends on CONFIG_TEST
endmenu

由于 test driver 对于内核来说是新的功能,所以需首先创建一个菜单 TEST Driver。然后,显示 “ TEST support”,等待用户选择;接下来判断用户是否选择了 TEST Driver,如果是( CONFIG_TEST=y),

则进一步显示子功能:用户接口与 CPU 功能支持;由于用户接口功能可以被编译成内核模块,所以这里的询问语句使用了 tristate。为了使这个 Kconfig 能起作用,修改 arch/arm/Kconfig 文件,增加:
source "drivers/test/Kconfig"

脚本中的 source 意味着引用新的 Kconfig 文件。

在新增的 test 目录下,应该包含如下 Makefile 文件:

 # drivers/test/Makefile
#
# Makefile for the TEST.
#
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
obj -$(CONFIG_TEST_CPU) += cpu/

该脚本根据配置变量的取值,构建 obj-*列表。由于 test 目录中包含一个子目录 cpu,当CONFIG_TEST_CPU=y 时,需要将 cpu 目录加入列表。
test 目录中的 cpu 子目录也需包含如下的 Makefile:

 # drivers/test/test/Makefile
#
# Makefile for the TEST CPU
#
obj -$(CONFIG_TEST_CPU) += cpu.o

为了使得整个 test 目录能够被编译命令作用到, test 目录父目录中的 Makefile 也需新增如下
脚本:

obj -$(CONFIG_TEST) += test/

在 drivers/Makefile 中加入 obj-$(CONFIG_TEST) += test/,使得在用户在进行内核编译时能
够进入 test 目录。
增加了 Kconfig 和 Makefile 之后的新的 test 树型目录为:
| --test
   | -- cpu
     | -- cpu.c
     | -- Makefile
   | -- test.c
   | -- test_client.c
   | -- test_ioctl.c
   | -- test_proc.c
   | -- test_queue.c
   | -- Makefile
   | -- Kconfig

回到linux源码主目录,执行 make menuconfig命令,进入Device Drivers选项,可以看到新添加的选项,

可以看到TEST Driver已经出现在了 menuconfig中,进入该选项,如下图,是不是很神奇,我们添加的配置选项已经可以选择了。(根据原书略微修改了drivers中的Kconfig,再最后添加了source drivers/test/Kconfig,

这样新添加的内容就会出现在Device Drivers选项下,另外还增加了Set CPU Freq选项)

linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录的更多相关文章

  1. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

  2. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  3. IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试

    IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...

  4. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  5. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  6. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  8. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  9. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

随机推荐

  1. mysql常用&实用语句

    Mysql是最流行的关系型数据库管理系统,也是目前最常用的数据库之一,掌握其常用的操作语句是必不可少的. 下面是自己总结的mysqp常用&实用的sql语句: 1.mysql -u root - ...

  2. USB协议-USB的描述符及其之间的关系

    USB只是一个总线,只提供一个数据通路而已.USB总线驱动程序并不知道一个设备具体如何操作,有哪些行为.具体的一个设备实现什么功能,要由设备自己来决定.那么,USB主机是如何知道一个设备的功能以及行为 ...

  3. dedecms搜索框制作

    <form method=" name="kwtype"> <table width="> <tr> <td widt ...

  4. 20160621-BAPI 更改外向DN&更改拣配

    参考代码转自:http://blog.sina.com.cn/s/blog_4c66402b01012lgr.html 感谢. 测试一把,再做总结. 1.更改外向交货单: 2.更改内向交货单. htt ...

  5. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

  6. MindProject R6025解决

    -- 来之百度贴吧,收藏在此. 不知道吧里有没有人用mindmanager2012,如果用的话会发现保存.mmap文件后,移动到其他地方,再打开,就会出错,软件关闭.网上很多人说是模版里tips的原因 ...

  7. 为什么要使用sass

    或许你已经听过一个叫作Sass的东东?可能你已经了解它,并且你能像大师一样写出一些函数? 对于不清楚我在讲什么的读者或者客户,你们可以想想web开发过程,你们的期望和站点用户的体验想要怎样的.无论如何 ...

  8. TIOBE Index for November 2015(转载)

    原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...

  9. log4net 发布到生产环境不写日志的解决方法--使用 NLog日志

    1.升级到log4net的最新版 PM下执行 Install-Package log4net 还是无法解决的,使用下面的方法 2.使用Nlog替换之,详见https://github.com/NLog ...

  10. ios系统的中arm指令集

    arm结构处理器,几乎所有的手机都基于arm,其在嵌入式系统中应用非常广泛. ARM 处理器因为低功耗和小尺寸而闻名,它的性能在同等功耗的产品中也很出色.这里我们注意一点,模拟器并不运行arm代码,软 ...