搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小蓝xlanll
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
从零开始学Python第07课:分支结构和循环结构的应用_循环结构和分支结构运用
2
DSP SRIO接口收发配置_dsp中srio整个配置过程
3
第九课:eNSP VRRP虚拟路由冗余协议配置教程(防火墙双机热备)_ensp中交换机配置冗余网关
4
七. 图像生成文本
5
数据结构与算法名词解析总结_输入字符a至f,按输入字符的顺序建立一个字符结点(每个结点存储一个字符)的单向链
6
【C语言课程设计】学员管理系统,含代码_c语言设计学生管理系统代码
7
Java设计模式详解:抽象工厂模式
8
华为OD机试 - 特殊的加密算法(Java & JS & Python & C & C++)_华为od机试 特殊的加密算法
9
当运行深度学习网络出现cuda out of memory错误:_cuda oom
10
学习笔记_基于pytorch的YOLOv7 - day2_stack in computational block
当前位置:
article
> 正文
内核模块下载和编译、安装_gkl内核下载
作者:小蓝xlanll | 2024-03-25 18:35:34
赞
踩
gkl内核下载
开源力量学习笔记
下载内核
可以从网站git.kernel.org中找到自己感兴趣的分支
Linus的分支
git clone git
:
/
/
git
.
kernel
.
org
/
pub
/
scm
/
linux
/
kernel
/
git
/
torvalds
/
linux
.
git
下载完成后,可以用make localmodconfig来按照现有的kernel编译源代码
开始编译
make
-
j6
编译完后安装
make modules_install
make install
然后修改grub2
,默认fedora19第一个就是安装的内核。ubuntu可以用sudo update-grub
cd
/
boot
/
grub2
vim grub
.
cfg
重启一下就可以进编译好的
内核了。可以写个内核模块测试一下
echo
>
main
.
c
echo
>
Makefile
linux中底层有一个Kbuild,然后在各层中有kconfig.然后又对应一个Makefile
下面是一个简单的Makefile:
obj
-
m
=
main
.
o
all
:
make
-
C
/
lib
/
modules
/
`
uname
-
r`
/
build M
=
`
pwd`
clean
:
rm
-
f
*
.
o
*
.
ko
*
.
mod
.
c modules
.
order Module
.
symvers
make -C 后面是内核的目录,用``+shell可以获取内容。M应该是内核的源地址。
要使用内核的函数,必须只使用内核的导出函数。不能使用用户空间的任何Lib
-EXPORT_SYMBOL和EXPORT_SYMBOL_GPL
-或者在.h中实现的函数
编译有多个源文件的module
此时main.c文件中还是空的,加点东西试试吧
#include
<
linux
/
module
.
h
>
MODULE_LICENSE
(
"GPL"
)
;
//代码的说明
MODULE_AUTHOR
(
"Chen"
)
;
MODULE_DESCRIPTION
(
"The module is only used for test."
)
;
static __init
int
minit
(
void
)
//如果函数只调用一次的函数可以用__init来修饰,调用完后可以free它
{
printk
(
"call %s.\n"
,
__FUNCTION__
)
;
return 0
;
}
static __exit
int
mexit
(
void
)
//退出的话就可以用__exit修饰
{
printk
(
"call %s.\n"
,
__FUNCTION__
)
;
}
module_init
(
minit
)
//内核宏入口
module_exit
(
mexit
)
//内核宏退出
make后可以用insmod家在编译好的内核模块main.ko,卸载就是rmmod
然后通过dmesg看情况。
更进一步的话,可以再创建一个other.c
#include
<
linux
/
module
.
h
>
void other_function
(
void
)
{
printk
(
"call %s.\n"
,
__FUNCTION__
)
;
}
然后在main.c中引用,当然我们还需要再改Makefile
obj
-
m
=
test
.
o
test
-
y
=
main
.
o other
.
o
all
:
make
-
C
/
lib
/
modules
/
`
uname
-
r`
/
build M
=
`
pwd`
clean
:
rm
-
f
*
.
o
*
.
ko
*
.
mod
.
c modules
.
order Module
.
symvers
-y表示把mian.o和other.o生成test.o
编译多个源文件位于不同目录的module
如果other.o在src的文件目录下呢,那么test-y = main.o src/other.o
指定include.h位置
如果是other.h在include文件夹下,那么同样加上目录
#ifndef __OTHER_H
#define __OTHER_H
extern void other_function
(
void
)
;
#endif
当然如果我们需要使用外部的库文件,文件路径没有那么固定。这时候就可以在Makefile中添加
all
:
make -C /lib/modules/`uname -r`/build EXTRA_CFLAGS=-I
$(
shell
pwd
)
/include M=`pwd`
同时main.c中的#include "include/other.h"可以改成
#include
<
other
.
h
>
模块参数
我们可以用modinfo来看模块信息,如:
[
chen@localhost linux
]
$
modinfo
.
/
fs
/
fuse
/
fuse
.
ko
filename
:
/
home
/
chen
/
mygit
/
linux
/
.
/
fs
/
fuse
/
fuse
.
ko
表示模块的绝对路径
alias
:
devname
:
fuse
alias:别名
alias
:
char
-
major
-
10
-
229
alias
:
fs
-
fuseblk
alias
:
fs
-
fuse
license
:
GPL
支持GPL协议
description
:
Filesystem in Userspace
模块的描述
author
:
Miklos Szeredi
<
miklos@szeredi
.
hu
>
模块作者
alias
:
fs
-
fusectl
depends
:
depends:表示fuse.ko模块所依赖的模块
intree
:
Y
vermagic
:
3
.
18
.
0
-
rc5 SMP mod_unload
vermagic:表示编译时对应的内核版本、硬件平台及GCC版本
parm
:
max_user_bgreq
:
Global limit
for
the maximum number of backgrounded requests an unprivileged user can set
(
uint
)
parm:相对应的调试参数
,括号中表示参数的类型如uint
parm
:
max_user_congthresh
:
Global limit
for
the maximum congestion threshold an unprivileged user can set
(
uint
)
可以自己编写一个
static unsigned
int
testpar
=
0
;
module_param
(
testpar
,
uint
,
S_IRUGO
|
S_IWUSR
)
//然后在main函数中加
printk("testpar = %d.\n", testpar);
编译后就看到了
[
chen@localhost test
]
$
modinfo tmain
.
ko
filename
:
/
home
/
chen
/
mygit
/
test
/
tmain
.
ko
description
:
The module is only used
for
test
.
author
:
Chen
license
:
GPL
depends
:
vermagic
:
3
.
18
.
0
-
rc5 SMP mod_unload
parm
:
testpar
:
uint
然后我们就可以给模块参数
赋值了
[
chen@localhost test
]
$
insmod tmain
.
ko
[
chen@localhost test
]
$
rmmod tmain
.
ko
[
chen@localhost test
]
$
insmod tmain
.
ko testpar
=
100
[
chen@localhost test
]
$
dmesg
[
7389
.
378824
]
testpar
=
0
.
//之前没赋值
[
7389
.
378830
]
call minit
.
[
7389
.
378831
]
call other_function
.
[
7509
.
541034
]
call mexit
.
[
7529
.
539102
]
testpar
=
100
.
//赋值之后
[
7529
.
539107
]
call minit
.
[
7529
.
539108
]
call other
_fun
ction
.
编写和编译一个module之间有依赖的情况
首先把上面的模块变成m1,复制一个m2,删除其中的src
,在m
2中编译会有警告说函数未定义
这时就可以把m1编译出来的Module.symvers复制到m2中,编译就能通过。加载时需要先加载m1模块,再加载m2模块
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(632) | 评论(0) | 转发(0) |
0
上一篇:
linux实用技巧:你该使用ctags查找源码了
下一篇:
3.18内核的sk_buff
相关热门文章
c++防止隐藏的拷贝构造...
Linux内核模块LKM编译-自制Mak...
关于内核模块的挂载后的最终虚...
关于内核模块挂载出现“no sym...
存在依赖关系的内核模块的编译...
linux 常见服务端口
xmanager 2.0 for linux配置
【ROOTFS搭建】busybox的httpd...
openwrt中luci学习笔记
什么是shell
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小蓝xlanll/article/detail/311773
推荐阅读
article
Zilliz
Cloud
再发新版本:
性能
提升
超
10
倍
,
AI 应用开发流程再简化!_ziiclo...
Zilliz
一直致力于为用户提供开箱即用的数据集成解决方案
,
近期
,
我们便通过引入 Confluent 和 Airbyt...
赞
踩
article
HarmonyOS
内核
进程
调度
相关
函数
_
harmonyos
connect
常用
函数
汇总...
几个相关
函数
调度
初始化
函数
调度
初始化
函数
==UINT32 OsSchedInit(VOID)在任务初始化
函数
UINT32...
赞
踩
article
Codeforces
Round
9
3
5 (
Div
.
3
)
A
~
E
...
二分但没完全二分,数组的取值为1~n,且可能不单调,题目给出的方法适用于单调递增,故,如果起初数组为单调递增的话操作数为...
赞
踩
article
一文了解
提示
工程
(
Prompt
Engineering
)...
提示
是你期望 AI 模型输出的精确蓝图。它们充当中介语言,将人类意图转化为人工智能可以执行的任务。_
提示
工程
提示
工程
...
赞
踩
article
Android
Studio
配置多个代码仓库
repositories
_
android
reposit...
收集了一些。方便copy使用。
repositories
{ mavenCentral() maven { url "ht...
赞
踩
article
Mac
传输
安卓文件工具
Android
File
Transfer
1.0.12_androidfi...
一旦连接成功,您就可以在
Mac
电脑上打开
Android
File
Transfer
应用程序,浏览
Android
设备上的文...
赞
踩
article
java
/php/
node
.
js
/
python
基于
微信
小
程序
的
剧本
杀游戏【2024年毕设】_pyth...
本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。_
python
剧本
杀线索模版
python
剧本
杀线索模版 ...
赞
踩
article
uniapp
左右
菜单栏
联动
滚动
代码
_
左右
列表
联动
的网页
代码
...
【
代码
】
uniapp
左右
菜单栏
联动
滚动
代码
。_
左右
列表
联动
的网页
代码
左右
列表
联动
的网页
代码
...
赞
踩
article
细粒度
图像识别
初步学习...
细粒度
图像识别
现在图像分类中一个难点,它的目标是在一个大类中识别子类,比如说在鸟的大类下识别鸟的种类,在车的大类下,识别...
赞
踩
article
arcgis
python
导出
统计表
_
arcgis
python
把多个
MXD
批量
导出
一个
PDF
...
# -*- coding: cp936 -*-import arcpy, os, string#Read input p...
赞
踩
article
Java
项目
参数
校验
最佳实践,真香_
java
web
请求
参数
校验
最佳...
JDK1.6 中推出了一种规范:JSR-303,JSR 是
Java
Specification Requests 的缩...
赞
踩
article
uniapp
微信小
程序
tabs
选项
卡
组件
,
可以
设置固定顶部-吸顶(
fixed
)
,
随
页面
滚动
自动切...
可以
设置
tabs
贴顶,(固定在顶部)点击
选项
,
页面
滚动
到指定类型位置
页面
滚动
,typeTabs
滚动
到指定的类型this....
赞
踩
article
细粒度
视觉
分析综述
TPAMI2021
_
cub200
数据
集
文本
描述...
视觉
细粒度
分析综述_
cub200
数据
集
文本
描述
cub200
数据
集
文本
描述 ...
赞
踩
article
Logback
日志异步输出
数据库
(
Oracle
)
_
logback
oracle
...
参考资料:
Logback
官方文档:http://
logback
.qos.ch/manual/appenders.html...
赞
踩
article
鸿蒙
开发实战一——手表篇_
鸿蒙
手表修改
主
页面
和
训练
页面
中
按钮
的
文本及样式...
应用创建时触发应用毁灭时触发onlnit
页面
数据已准备好,可以使用js
中
的
数据: 资源准备好了onReady
页面
已编...
赞
踩
article
简谈【
自动化
协议
逆向
工程技术
的
当前
趋势】_
协议
逆向
综述
...
声明:1)本文由我bitpeach原创撰写,禁止一切形式的转载。如有转载,侵权必究。2)本简谈主要分为三个方面,第一是自...
赞
踩
article
qlaber
中
放置
图片
_ps
图片
处理过程
中
的作用及
使用
方法...
Photoshop的标尺与参考线在
图片
处理过程
中
的作用及
使用
方法。ps的“标尺”常用于辅助用户绘制精确尺寸的对象。“参考...
赞
踩
article
CV深度学习项目调试开发过程中报错记录【持续更新】_
can
'
t
open
/
read
file
: ch...
我排查定位到问题图片后分析出来的原因就是图片的命名中出现一些特殊的字符或者是无法被解析的字符,连续两个下划线也是不可以的...
赞
踩
article
pytorch
bert
文本
分类
_一起读
Bert
文本
分类
代码
(
pytorch
篇 五)...
Bert
是去年google发布的新模型,打破了11项纪录,关于模型基础部分就不在这篇文章里多说了。这次想和大家一起读的是...
赞
踩
article
Qt
之
QLabel
...
简述
QLabel
提供了一个文本或图像的显示,没有提供用户交互功能。一个
QLabel
可以包含以下任意内容类型:内容 设置纯...
赞
踩
相关标签
程序人生
harmonyos
华为
链表
操作系统
Codeforces
c++
算法
Atcoder
蓝桥杯
prompt
AIGC
python
人工智能
深度学习
Android Studio
repositories
macos
android
java
游戏
课程设计
uni-app
javascript
前端