目标

Kernel:Linux 4.4

我编写一个简单的hello worldLinux 内核模块后,已经可以通过insmod动态加载到系统内核中,并通过rmmod卸载模块。但是出于学习的目的,我想把这个内核添加到Linux源码中,并且可以通过Kconfig进行配置,在make menuconfig的指令下,可以生成相应的菜单可以进行配置。

drivers/Kconfig

在Linux内核源码路径下,可以找到drivers文件夹路径,这里保存的是各种驱动程序。在终端输入make menuconfig可以在终端上显示一个用户界面能对内核进行相应的配置。

Device Drivers 就是驱动的配置选型的菜单。

将光标移动到exit退出当前界面,返回到最初的终端。

sudo cd drivers
sudo mkdir demo
vi Kconfig # 或者使用 gedit Kconfig

drivers路径下创建一个文件夹demo,打开Kconfig,把drivers/demo/Kconfig的文件路径添加到drivers/Kconfig

menu "Device Drivers"
source drivers/demo/Kconfig //只需要添加这一行
endmenu

demo下的Kconfig 和 Makefile

demo下添加KconfigMakefile,当前demo下的文件列表

├── demo_gpio.c
├── Kconfig
├── Makefile

Kconfig

menuconfig DEMO_DRIVERS #DEMO_DRIVERS 菜单
tristate "demo drivers"
help
demo if DEMO_DRIVERS
config DEMO_PLATFORM_GPIO # 菜单子项
tristate "the most simplest driver" #子项显示内容
help
Driver learning # help显示内容
endif

Makefile

obj-$(CONFIG_DEMO_PLATFORM_GPIO) +=demo_gpio.o

demo_gpio.c

#include <linux/init.h>
#include <linux/module.h> static int __init demo_gpio_init(void){
printk(KERN_INFO "demo gpio module init\n");
return 0;
} module_init(demo_gpio_init); static void __exit demo_gpio_exit(void){
printk(KERN_INFO "demo gpio module exit\n");
} module_exit(demo_gpio_exit); MODULE_LICENSE("GPL");
MODULE_AUTHOR("gw");





最后,可以看到,demo_gpio已经成功添加到menuconfig的里了。

Linux内核驱动学习(二)添加自定义菜单到内核源码menuconfig的更多相关文章

  1. Linux内核驱动学习(八)GPIO驱动模拟输出PWM

    文章目录 前言 原理图 IO模拟输出PWM 设备树 驱动端 调试信息 实验结果 附录 前言 上一篇的学习中介绍了如何在用户空间直接操作GPIO,并写了一个脚本可以产生PWM.本篇的学习会将写一个驱动操 ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  3. 深度学习(七十一)darknet 源码阅读

    深度学习(七十一)darknet 源码阅读

  4. JDK1.8源码分析01之学习建议(可以延伸其他源码学习)

    序言:目前有个计划就是准备看一下源码,来提升自己的技术实力.同时现在好多面试官都喜欢问源码,问你是否读过JDK源码等等? 针对如何阅读源码,也请教了我的老师.下面就先来看看老师的回答,也许会有帮助呢. ...

  5. Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)

    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...

  6. Java并发包源码学习系列:线程池ScheduledThreadPoolExecutor源码解析

    目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedu ...

  7. Netty 学习(十):ChannelPipeline源码说明

    Netty 学习(十):ChannelPipeline源码说明 作者: Grey 原文地址: 博客园:Netty 学习(十):ChannelPipeline源码说明 CSDN:Netty 学习(十): ...

  8. linux内核驱动学习指南

    1. 参考链接 小白的博客 ONE_Tech 你为什么看不懂Linux内核驱动源码? 求教怎么学习linux内核驱动

  9. Linux内核驱动学习(六)GPIO之概览

    文章目录 前言 功能 如何使用 设备树 API 总结 前言 GPIO(General Purpose Input/Output)通用输入/输出接口,是十分灵活软件可编程的接口,功能强大,十分常用,SO ...

随机推荐

  1. PHP常量:JSON_UNESCAPED_UNICODE

    函数: json_encode() - 对变量进行 JSON 编码 说明: json_encode ( mixed $value [, int $options = 0 [, int $depth = ...

  2. 调用sleep后,我做了一个噩梦

    sleep系统调用 我是一个线程,生活在Linux帝国.一直以来辛勤工作,日子过得平平淡淡,可今天早上发生了一件事让我回想起来都后怕. 早上,我还是如往常一样执行着人类编写的代码指令,不多时走到了一个 ...

  3. .Net Core Send Email

    1.安装Nuget包MailKit,引用命名空间. using MailKit.Net.Smtp; using MimeKit; 注意:引用MailKit对应最新版本 2.定义收发地址和标题 Mime ...

  4. pytorch 中HWC转CHW

    import torch import numpy as np from torchvision.transforms import ToTensor t = torch.tensor(np.aran ...

  5. TensorFlow keras dropout层

    # 建立神经网络模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), # 将输入数据的形状进行修改成神经网 ...

  6. 【认证与授权】Spring Security的授权流程

    上一篇我们简单的分析了一下认证流程,通过程序的启动加载了各类的配置信息.接下来我们一起来看一下授权流程,争取完成和前面简单的web基于sessin的认证方式一致.由于在授权过程中,我们预先会给用于设置 ...

  7. python 字符与数字如何转换

    python中字符与数字相互转换用chr()即可. python中的字符数字之间的转换函数 int(x [,base ])                               将x转换为一个整 ...

  8. java传参问题

    参考链接:https://www.cnblogs.com/linkstar/p/5951141.html public class Example { String testString = publ ...

  9. 《剑指Offer》- 连续子数组的最大和或最小和

    前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...

  10. PE文件学习(1)DOS和NT

    大致结构 DOS头和NT头之间通常还有个DOS Stub DOS头 DOS头的作用是兼容MS-DOS操作系统中的可执行文件 一般没啥用 记录着PE头的位置 DOS头定义部分 typedef struc ...