Linux内核驱动学习(二)添加自定义菜单到内核源码menuconfig
目标
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下添加Kconfig和Makefile,当前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的更多相关文章
- Linux内核驱动学习(八)GPIO驱动模拟输出PWM
文章目录 前言 原理图 IO模拟输出PWM 设备树 驱动端 调试信息 实验结果 附录 前言 上一篇的学习中介绍了如何在用户空间直接操作GPIO,并写了一个脚本可以产生PWM.本篇的学习会将写一个驱动操 ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- 深度学习(七十一)darknet 源码阅读
深度学习(七十一)darknet 源码阅读
- JDK1.8源码分析01之学习建议(可以延伸其他源码学习)
序言:目前有个计划就是准备看一下源码,来提升自己的技术实力.同时现在好多面试官都喜欢问源码,问你是否读过JDK源码等等? 针对如何阅读源码,也请教了我的老师.下面就先来看看老师的回答,也许会有帮助呢. ...
- Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)
Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...
- Java并发包源码学习系列:线程池ScheduledThreadPoolExecutor源码解析
目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedu ...
- Netty 学习(十):ChannelPipeline源码说明
Netty 学习(十):ChannelPipeline源码说明 作者: Grey 原文地址: 博客园:Netty 学习(十):ChannelPipeline源码说明 CSDN:Netty 学习(十): ...
- linux内核驱动学习指南
1. 参考链接 小白的博客 ONE_Tech 你为什么看不懂Linux内核驱动源码? 求教怎么学习linux内核驱动
- Linux内核驱动学习(六)GPIO之概览
文章目录 前言 功能 如何使用 设备树 API 总结 前言 GPIO(General Purpose Input/Output)通用输入/输出接口,是十分灵活软件可编程的接口,功能强大,十分常用,SO ...
随机推荐
- Delphi学习手记——单引号和双引号的区别
单引号和双引号的区别 双引号表示其中字符可能包含变量,而单引号表示整个引号内的东西都当成字符串来处理. 也就是说:没有内设变量就用单引号'',有就用双引号"". 举例说明: $va ...
- PHP函数:fopen
fopen() - 打开文件或者 URL. 注意:array_key_exists() 仅仅搜索第一维的键. 多维数组里嵌套的键不会被搜索到. 说明: fopen ( string $filenam ...
- linux常用命令--打包和压缩文件
bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 bzip2 file1 压缩一个叫做 'file1' 的文件 gunzip file1.gz 解压一个叫做 'file1 ...
- 常见web漏洞的整理之SQL注入
SQL注入: 简介: 全称Structured Query Language,即结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言.也被作为关系式数据库管理系统的标准语言. 原理: ...
- react: nextJs koa project basic structure
1.init nextJs project npm init npm install react react-dom next config script in package.json " ...
- js上传文件前判断获取文件大小并且加以判断
描述:要求浏览器单个上传文件大小不超过10M. 解决方案: var fileSize = $("#fileId")[0].files[0].size/(1024*1024);if( ...
- 电脑Win10晚上让它更新,为何第二天开机蓝屏?
大家好,欢迎来到<电脑讲堂>,我是主持人高帅帅.PS:没错,就是那个人见人爱,花见花开的高帅帅. 话说,在一个月黑风高的夜晚,我晚上离开实验室,离开前看到了电脑的系统更新提醒,就顺手点了一 ...
- 开发机直连 Docker 中的 Redis 容器小教程
在笔者日常开发中,都是把redis装在windows系统中.虽然可以通过RedisDesktopManager等客户端工具连接操作redis,但是还是觉得low了一些.因为作为程序员,我可能更想在Li ...
- tp5--Excel表格导入导出
来源于:https://www.cnblogs.com/MyIsLu/p/6830579.html PHPExcel 扩展包下载地址: https://github.com/P ...
- 2019-2020-1 20199326《Linux内核原理与分析》第七周作业
实验内容:分析Linux内核创建一个新进程的过程 初始化Menu Os,输入fork可以看到menuos触发了一个fork系统调用 再开一个shell,进入调试模式,设置几个断点sys_clone,d ...