关于驱动程序模块编译

derest12 2010-08-31 11:24:20
为什么我的驱动程序模块编译时候通过了,并生产了.ko文件,当我加载到系统上时不能出现我想要的结果,我是初学者,
#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT "hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
应该出现的结果是在加载的时候出现hello,wrold,在卸载模块的时候出现Goodbye,cruel wrold,但是我加载后卸载了什么都没出现。请问各位高手这个可能是哪点出错了?
...全文
398 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
derest12 2010-09-04
  • 打赏
  • 举报
回复
呵呵,我知道那点出错了,是我的Kcongfig和Mskefile文件的里面的标题有一个字母写反了,悲剧,太不仔细了,
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
要想在内核配置选项中出现这个模块,必须要修改Kconfig这个文件,
derest12 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hao507 的回复:]
我上周也弄的这个问题
http://blog.csdn.net/hao507/archive/2010/08/27/5843351.aspx
看我这篇文章~~希望对你有所帮助~
[/Quote]
为什么我照着你这个 到内核里面的编译模块,但内核模块下,调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- xconfig出现的是一个内核模块配置选项,但是我在里面并没有找到相应的新加的驱动程序选项,请问一下你是怎么做的?
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 derest12 的回复:]
没事 反正是对了的,不过我编译模块是调用的一个Makefile文件,没有专门在内核里面去修改Kconfig和Makefile文件,我试过那样了,但是没有生产我要的.ko文件,我也不知道怎么回事
看来还要继续探索
[/Quote]
呵呵,是的哈,靠自己调出来的时候,心情很爽~~
祝你好运~
derest12 2010-09-01
  • 打赏
  • 举报
回复
没事 反正是对了的,不过我编译模块是调用的一个Makefile文件,没有专门在内核里面去修改Kconfig和Makefile文件,我试过那样了,但是没有生产我要的.ko文件,我也不知道怎么回事
看来还要继续探索
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 derest12 的回复:]
10楼的,呵呵 不好意思哈,我的交叉编译器弄错了,改过来了就好了,呵呵,
我还有一个疑问,为什么我在卸载我的模块时,控制台会多出一句提示rmmod: module 'hello' not found,我在网上看了别人的帖子,但是在我的lib/modules/2.6.28.6/删除了那个modules.dep.bb文件还是一样的 不行,我在那个看见,而且这个文件是在卸载指令调用的时候 才会生成,删……
[/Quote]
你说说你动态加载具体的做法是怎样的
九个太阳2023 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 derest12 的回复:]
我已经修改了同目录下的Kconfig和Makefile,并在内核模块看到了相应的选项了,我标记为M,再调用模块编译,但是在相应的目录下并未看见生成的.ko文件,你们知道一般这样的情况 ,可能是什么地方出错吗?
[/Quote]
你重新编译了么?
最好把你的Kconfig和Makefile的代码贴出来,这样方便大家交流~~~
derest12 2010-09-01
  • 打赏
  • 举报
回复
我已经修改了同目录下的Kconfig和Makefile,并在内核模块看到了相应的选项了,我标记为M,再调用模块编译,但是在相应的目录下并未看见生成的.ko文件,你们知道一般这样的情况 ,可能是什么地方出错吗?
lkncjy 2010-08-31
  • 打赏
  • 举报
回复
莫非是init()和exit()函数前面分别还要有个关键字修饰的问题,LZ试一下啵,我也不确定。
wwwunix 2010-08-31
  • 打赏
  • 举报
回复
1、用dmesg看看有没有输出。
2、用lsmod看看你的模块是否加载成功。
deep_pro 2010-08-31
  • 打赏
  • 举报
回复
dmesg 了没
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
我上周也弄的这个问题
http://blog.csdn.net/hao507/archive/2010/08/27/5843351.aspx
看我这篇文章~~希望对你有所帮助~
derest12 2010-08-31
  • 打赏
  • 举报
回复
10楼的,呵呵 不好意思哈,我的交叉编译器弄错了,改过来了就好了,呵呵,
我还有一个疑问,为什么我在卸载我的模块时,控制台会多出一句提示rmmod: module 'hello' not found,我在网上看了别人的帖子,但是在我的lib/modules/2.6.28.6/删除了那个modules.dep.bb文件还是一样的 不行,我在那个看见,而且这个文件是在卸载指令调用的时候 才会生成,删除了也没有用的
derest12 2010-08-31
  • 打赏
  • 举报
回复
我看了,那个打印的提示语在/var/log/messages文件中的,为什么会这样呢,那个高手能告诉我
hurricane880 2010-08-31
  • 打赏
  • 举报
回复
$cat /var/log/message | grep hello
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
我的那篇文章在我的平台上是测试过的~~呵呵,
九个太阳2023 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 derest12 的回复:]
二楼的,我照着你那个步骤编译,但是我在内核的主目录下调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-xconfig指令,会一直报错误信息,编译不来,提示如下:
make: arm-none-linux-gnueabi-xconfiggcc:命令未找到
CHK include/linux/version.h
make[1]: “……
[/Quote]
你的交叉编译器用的是什么??
wwwunix 2010-08-31
  • 打赏
  • 举报
回复
你的交叉编译器用的是什么?
如果是
arm-linux-gcc
那么这样用:
make ARCH=arm CROSS_COMPILE=arm-linux-
derest12 2010-08-31
  • 打赏
  • 举报
回复
二楼的,我照着你那个步骤编译,但是我在内核的主目录下调用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-xconfig指令,会一直报错误信息,编译不来,提示如下:
make: arm-none-linux-gnueabi-xconfiggcc:命令未找到
CHK include/linux/version.h
make[1]: “include/asm-arm/mach-types.h”是最新的。
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-arm
CC kernel/bounds.s
/bin/sh: arm-none-linux-gnueabi-xconfiggcc: command not found
make[1]: *** [kernel/bounds.s] 错误 127
make: *** [prepare0] 错误 2
请问一下 各位怎么解决
derest12 2010-08-31
  • 打赏
  • 举报
回复
lsmod 模块是成功加载了的,我是用的虚拟机,在终端上没有输出,
dmesg是什么意思?
加载更多回复(2)
源码下载地址: https://pan.quark.cn/s/c20c5da6957d 卸载 首先,需要核实是否存在先前安装的记录,或者系统是否预置了httpd服务,可通过以下命令进行验证: # rpm -qa | grep httpd 或者: # yum list | grep httpd 我之前已经进行过一次安装,因此在此会看到相应的显示结果: 然后我将着手卸载我的httpd,首要步骤是终止httpd服务的运行,对应的命令如下: # systemctl stop httpd.service 接着,无论是使用 rpm -e 还是 yum -erase 命令均可实现卸载,但需注意使用rpm -e命令前必须自行移除相关依赖包,因此我选择使用yum -erase命令进行卸载,具体命令为: # yum erase httpd.x86_64 在执行过程中会提示确认操作 在Linux环境中,CentOS 7 是一种非常普遍的操作系统,特别是在服务器应用方面。Apache HTTP Server(通常简称为Apache或httpd)是最广受欢迎的网页服务器软件之一,主要用于承载网站及相关服务。本资源将详尽说明在CentOS 7系统中关于Apache服务的安装与移除流程。 ### 移除Apache服务 1. **核实安装情况**: 在执行卸载操作前,必须先确认Apache是否已安装。这可以通过查询已安装的软件包列表来完成,可选用以下任一命令: ```bash # rpm -qa | grep httpd # yum list | grep httpd ``` 若Apache已安装,上述命令将返回相关的软件包信息。 2. **终止服务运行**: 在卸载前,必须先停止正在运行的A...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在信息技术行业,特别是在操作系统部署及维护方面,统一可扩展固件接口(UEFI)与Linux系统如Debian的相互配合是一个关键议题。本篇将深入分析"在Debian 9.13系统中通过UEFI启动的UEFI Shell"这一焦点,并阐述如何处理安装期间遭遇的启动障碍。 UEFI作为替代传统BIOS的新型固件架构,它带来了更为先进、更为安全的启动机制,同时支持更大容量的存储设备以及更迅捷的启动时间。在部署Debian 9.13(Stretch版本)时,用户可以选择运用UEFI模式进行安装,从而获取上述种种好处。然而,UEFI启动过程需要特定的引导管理器,一般而言是GRUB2的UEFI版本,即称作grubx64.efi。 描述中所述情形可能是由于安装阶段GRUB2引导管理器的UEFI版本未能被恰当地生成或设置,因而系统无法经由UEFI模式启动。在此情形下,"uefishell"工具便显得尤为重要。UEFI Shell是一个命令行界面,它允许用户在UEFI环境中执行多样任务,包括手动引导操作系统。它提供了一个临时的补救措施,使用户得以纠正引导故障。 为了借助UEFI Shell来纠正启动故障,必须遵循以下步骤: 1. **获取UEFI Shell**:通常,UEFI Shell作为现代计算机UEFI固件的一部分预先安装,但在某些情况下,可能需要从设备制造商的官方网站上获取最新版本。 2. **插入搭载UEFI Shell的USB存储设备**:将下载的UEFI Shell文件拷贝至一个采用FAT32格式化的USB存储设备上,并将其接入计算机。 3. **进入UEFI配置界面**:重新...

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧