社区
Linux_Kernel
帖子详情
如何查看Linux静态加载了哪些内核
chenchengnet
2010-01-04 02:16:14
大家好,
我在Linux中加了I2C驱动,就是i2c-pca-platform,静态加载的,为什么运行了内核后,在proc/devices中看不到这个驱动的名字呢,驱动的名字是“i2c-pca-platform”。但是,的确是有一个主设备号码是89的 叫“I2C”的驱动。
同样,我加了网络芯片DM9000的驱动,网络都可以传了,也看不到名叫"dm9000"的设备。在程序中,device_driver的名字就是叫”dm9000“
谁能解释么??
谢谢大家了
...全文
748
17
打赏
收藏
如何查看Linux静态加载了哪些内核
大家好, 我在Linux中加了I2C驱动,就是i2c-pca-platform,静态加载的,为什么运行了内核后,在proc/devices中看不到这个驱动的名字呢,驱动的名字是“i2c-pca-platform”。但是,的确是有一个主设备号码是89的 叫“I2C”的驱动。 同样,我加了网络芯片DM9000的驱动,网络都可以传了,也看不到名叫"dm9000"的设备。在程序中,device_driver的名字就是叫”dm9000“ 谁能解释么?? 谢谢大家了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
鹅凰嶂幽云
2011-07-24
打赏
举报
回复
我好像遇到差不多的问题,在make menuconfig选上了自己添加的菜单,但是启动的时候看不到加载驱动的信息。是否还要设置一些信息?
fineshang
2010-01-12
打赏
举报
回复
cat /dev 查看节点存在不存在就好了嘛。还有就是编译内核时make menuconfig里面查一下。
xuwukong
2010-01-12
打赏
举报
回复
在device.c里的device名应该和driver名一致才行吧
充电宝111
2010-01-12
打赏
举报
回复
[Quote=引用 7 楼 chenchengnet 的回复:]
引用 4 楼 wenxy1 的回复:
我想,应当没有专门查看build-in kernel的设备驱动的命令。
实际上kernel启动后,用 dmesg可以查看这些日志,从而可以得出kernel里驱动了哪些硬件。
有一个问题是 我在程序中写 platform_driver中的 .driver中的.name=“i2c-pca-platform”
那么是不是 就应该 对应的内核加载的这个驱动 就叫作“i2c-pca-platform”??
我把驱动 编译进去了,就像上面说的 用printk输出到控制台,也看到了输出信息,但是找不到叫“i2c-pca-platform”的驱动
倒是 有一个驱动叫做"I2C"
[/Quote]
如果是动态加载的设备,名字是udev根据他的conf里面的规则来起的
chenchengnet
2010-01-06
打赏
举报
回复
[Quote=引用 9 楼 wenxy1 的回复:]
引用 6 楼 chenchengnet 的回复:
引用 5 楼 deep_pro 的回复:
突然想到 最简单的办法就是你的驱动主动printk一下啊
有没有自然就清楚了
我现在就是 这么做的。
有一个问题是 我在程序中写 platform_driver中的 .driver中的.name=“dm9000”
那么是不是 就应该 对应的内核加载的这个驱动 就叫作“dm9000”
.name只是驱动的一个名字。
[/Quote]
如果我是动态加载驱动,那么在程序中写platform_driver中的 .driver中的.name=“dm9000”
内核加载后,使用lsmod查看,就应该要有 名叫dm9000的模块了 是吧
天亮后说晚安
2010-01-05
打赏
举报
回复
lsmod 查看
Kyph
2010-01-05
打赏
举报
回复
还真没有见到过有这样的命令,能单独将静态加载的模块列举出来
lsmod和lspci都是用来查看相应模块的,而不仅仅是静态模块。
只有从dmesg中查找
hallowwar
2010-01-05
打赏
举报
回复
学习了。
Wenxy1
2010-01-04
打赏
举报
回复
[Quote=引用 6 楼 chenchengnet 的回复:]
引用 5 楼 deep_pro 的回复:
突然想到 最简单的办法就是你的驱动主动printk一下啊
有没有自然就清楚了
我现在就是 这么做的。
有一个问题是 我在程序中写 platform_driver中的 .driver中的.name=“dm9000”
那么是不是 就应该 对应的内核加载的这个驱动 就叫作“dm9000”
[/Quote]
.name只是驱动的一个名字。
Wenxy1
2010-01-04
打赏
举报
回复
printk(KERN_EMERG “i2c-pca-platform” ); /* 用这个试试 */
chenchengnet
2010-01-04
打赏
举报
回复
[Quote=引用 4 楼 wenxy1 的回复:]
我想,应当没有专门查看build-in kernel的设备驱动的命令。
实际上kernel启动后,用 dmesg可以查看这些日志,从而可以得出kernel里驱动了哪些硬件。
[/Quote]
有一个问题是 我在程序中写 platform_driver中的 .driver中的.name=“i2c-pca-platform”
那么是不是 就应该 对应的内核加载的这个驱动 就叫作“i2c-pca-platform”??
我把驱动 编译进去了,就像上面说的 用printk输出到控制台,也看到了输出信息,但是找不到叫“i2c-pca-platform”的驱动
倒是 有一个驱动叫做"I2C"
chenchengnet
2010-01-04
打赏
举报
回复
[Quote=引用 5 楼 deep_pro 的回复:]
突然想到 最简单的办法就是你的驱动主动printk一下啊
有没有自然就清楚了
[/Quote]
我现在就是 这么做的。
有一个问题是 我在程序中写 platform_driver中的 .driver中的.name=“dm9000”
那么是不是 就应该 对应的内核加载的这个驱动 就叫作“dm9000”
deep_pro
2010-01-04
打赏
举报
回复
突然想到 最简单的办法就是你的驱动主动printk一下啊
有没有自然就清楚了
Wenxy1
2010-01-04
打赏
举报
回复
我想,应当没有专门查看build-in kernel的设备驱动的命令。
实际上kernel启动后,用 dmesg可以查看这些日志,从而可以得出kernel里驱动了哪些硬件。
Wenxy1
2010-01-04
打赏
举报
回复
build-in kernel的驱动,像PCI设备,可以用命令 lspci 来查看相应的设备。
要是内核模块用 lsmod, modinfo来查看有关信息。
deep_pro
2010-01-04
打赏
举报
回复
这个我还不会,
我想你可以把驱动中一些独有函数导出
看看导出符号表system.map里有没有来判断
编译进内核的模块就不能靠module_init来启动了,需要__initcall
我以前成功的例子http://hi.baidu.com/deep_pro/blog/item/94ee8d0f784d9a206159f306.html
rzsheng
2010-01-04
打赏
举报
回复
静态加载是指编译到内核吗?
insmod?
Linux
驱动学习
静态
加载
与动态
加载
详解
1、
静态
加载
和动态
加载
静态
加载
:
静态
加载
就是把驱动程序直接编译进
内核
,系统启动后可以直接调用。
静态
加载
的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载
内核
,效率较低。若采用
静态
加载
的驱动较多,会导致
内核
容量很大,浪费存储空间;动态
加载
:动态
加载
利用了
Linux
的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态
加载
的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行
内核
的裁剪,将不需要的驱动去除,大大减小了
内核
的存储
linux
驱动
加载
动态
加载
静态
加载
自动
加载
linux
驱动
加载
动态
加载
静态
加载
自动
加载
_luopandeng的博客-CSDN博客_
linux
驱动
加载
概述在
Linux
下可以通过两种方式
加载
驱动程序:
静态
加载
和动态
加载
。
静态
加载
就是把驱动程序直接编译进
内核
,系统启动后可以直接调用。动态
加载
利用了
Linux
的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块。驱动
加载
静态
加载
过程将模块的程序编译到
Linux
内核
中,也就是咱们在编译
内核
时选择Y的模块,
静态
由do_initcall函数
加载
。先来
【
Linux
内核
驱动】驱动的
静态
加载
和驱动的动态
加载
无
Linux
内核
模块
静态
加载
的顺序
内核
模块
静态
加载
的顺序
Linux
驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢?
Linux
系统使用两种方式去
加载
系统中的模块:动态和
静态
。
静态
加载
:将所有模块的程序编译到
Linux
内核
中,由do_initcall函数
加载
核心进程(/init/main.c)kernel_init do_basic_setup() do_initcalls...
Linux
动态
加载
内核
模块
Linux
属于单
内核
,为了弥补单
内核
扩展性与维护性差的缺点,
Linux
引入动态可
加载
内核
模块,模块可以在系统运行期间
加载
到
内核
或从
内核
卸载。模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到
内核
作为
内核
的一部分在
内核
空间运行。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他
内核
上层的功能。下面是一个简单的例子: (1)模块hello.c文件#i
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章