搜索
查看
编辑修改
首页
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
面向终客户和设备制造商的Ethernet-APL
2
android sdk $(^name)已停止工作,Windows 7上的Android Studio安装失败,未找到JDK
3
COLING'22 | 不同数据,不同模态!用于社交媒体多模态信息抽取的有效数据分割策略...
4
nltk.download(‘averaged_perceptron_tagger‘)报错
5
Pytorch学习率衰减基本方法_pytorch中如何使得学习率逐渐下降
6
Springboot开心学习(第九天)_pr18九天狐狸
7
Kibana操作ES 全覆盖 基础查询 DSL查询_kibana查询es数据
8
Elasticsearch的配置文件与参数设置
9
信用评分卡建模:决策树模型_使用树模型做评分卡
10
微服务设计原则——高可用
当前位置:
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
android
scrollto
到
指定
的
view
,Scroll
View
滚动到某个
指定
ID 的 V...
我想通过ID(也就是
View
),进行 Scroll
View
的滚动,但是没有成功。用下面的例子如何实现呢?
android
...
赞
踩
article
移远
EC20
在
linux
下
驱动
移植_
ec20
linux
驱动
...
在进行
驱动
移植前,首先得下载
linux
内核源码参考前一篇博客:https://blog.csdn.net/qq_4290...
赞
踩
article
php
判断
版本
号
大小,通用
javascript
代码
判断
版本
号
是否在
版本
范围之间_
javascript
...
通用
判断
版本
号
是否在两者之间,也可以搭配
判断
是否大于某
版本
号
,小于取反即可PS:需确保
版本
规范一致,比如都是.号分割的n...
赞
踩
article
Android
Scroll
View
滚动
到指定
View
的位置...
场景项目中优化用户体验,在选择完某个选项后,自动
滚动
到下一个选项。实现 scroll
View
.post{ ...
赞
踩
article
AI
Agent
行业
报告
:框架拆解、
应用
方向、
应用
领域
及相关公司深度梳理_ai
agent
行业
报告
:...
AI
Agent
人工代是一种够感知不同传统的人工智能,
AI
Agent
具备通过独立思考、调用工具去逐步完成给定目标的能力...
赞
踩
article
论文精讲|
TIP2022
:基于跨部件
学习
的
细粒度
图像分类_
cross
-
part
learning
...
为了进一步提高
细粒度
识别的性能,需要通过一种有效的方法集成融合后的特征。为了实现部件间的联合特征
学习
,本文设计了一个“领...
赞
踩
article
瑞昱
RTL8382
交换机
软件开发
方案遇到的问题_
rtl8382l
访问
内部
寄存器
...
在移植
交换机
软件到rtk系列
交换机
上遇到的一些问题总结在此留一个备份_
rtl8382l
访问
内部
寄存器
rtl8382l
...
赞
踩
article
AI
换脸
FaceFusion2.4
.
0
整合
包发布!优化
换脸
速度!更多高清模型!附指南(
WIN
/
MAC
...
FaceFusion2.4
.
0
最新版本,此版本重点优化了
换脸
速度和增加了更多人脸检测器。我也针对上个版本出现的问题进行了...
赞
踩
article
移远4G
EC200A
Pcie
模组在
Linux
环境
下
的
配置
...
中
的
配置
使模块
的
所有 USB 接口均绑定 USB 转串口 option 驱动程序,导致 USBNet 驱动程序接口无法工...
赞
踩
article
吴恩达
机器学习-可选
实验室
:简单
神经网络
(
Simple
Neural
Network
)...
在第一个可选
实验室
中,您在NumPy和Tensorflow中构建了一个神经元,并注意到它们的相似性。如讲座中所述,可以使...
赞
踩
article
Py
Qt
(
Python
+
Qt
)入门:
Designer
组件
属性
编辑界面中
QWidget
类相关
属性
详解_...
一、引言本文适用人员:本文比较长,适合不理解
Qt
Designer
部件
属性
的人员阅读或资料查找。声明:如果有人认为本文是...
赞
踩
article
RecycleView
横向来回自动
滚动
...
以下做出两处改动1.添加每次
滚动
距离设置2.实现来回
滚动
3.代码使用kotlinimport android.conte...
赞
踩
article
Semi
-
supervised
Open
-World
Object
Detection...
传统的开放世界对象检测(OWOD)问题设置首先区分已知和未知类别,然后在后续任务中引入标签时逐步学习未知对象。然而,当前...
赞
踩
article
南通大学
教务
管理
微信
公众
号体验...
南通大学
教务
管理
微信
公众
号体验,感觉有几点需要改进:一、首次关注使用
微信
公众
号,需要登录用户信息,登录完成后就跳出查询指...
赞
踩
article
比较
版本号
...
比较
版本号
比较
版本号
牛客项目发布项目版本时会有
版本号
,比如1....
赞
踩
article
Android
简单的
计算器
实现
_
android
开发
简易版
计算器
,
能
实现
加减乘除
4
个
功能
,
并为应用添...
android
中
实现
一
个
简单的
计算器
,
实现
连续的
加减乘除
运算。 首先,让我们看下布局: 最上边是一
个
edittext 用...
赞
踩
article
微信小
程序
全栈开发实践 第二章 微信小
程序
组件
介绍及
使用
--
2.6
scroll
-
view
组件
,...
scroll
-
view
是
一个
可以
滚动
的视图区域的容器
组件
。一、重要属性
scroll
-
view
的
滚动
属性,
实现
了两套功...
赞
踩
article
uniapp
商品
分类
点击/
滚动
定位
scroll
-
view
_
uniapp
:完成
商品
分类
页面(scr...
左
分类
,右
商品
左点击跳到其
商品
区 右滑动,左跳到其
分类
_
uniapp
:完成
商品
分类
页面(
scroll
-
view
),左侧导...
赞
踩
article
微信
商家
转账
到
零钱
:实用指南,涵盖
开通
、使用与
常见问题
...
首先一般要对原有的小程序界面进行修改,或者如果有服务号的话也可以修改服务号菜单栏,以保证符合审核要求。这个时间需要2天左...
赞
踩
article
使用
google
的
bert
结合
哈工大
预训练
模型
进行
中文
/英文文本二分类,基于
pytorch
和tran...
使用
bert
的
哈工大
预训练
模型
进行
中文
/英文文本二分类,基于
pytorch
和
transformer
前提简要介绍开始导入必...
赞
踩
相关标签
android scrollto到指定的view
移远EC20在linux下驱动移植
移远EC20
php判断版本号大小
移动开发
人工智能
学习
分类
深度学习
linux
AIGC
python
stable diffusion
驱动开发
机器学习
神经网络
Python
PyQt
Qt Designer
部件属性
recycleview
目标检测
计算机视觉
leetcode