请问如何把驱动程序编译成可加载的内核模块?

时间:2021-03-30 22:21:14
我现在已经有了一个USB.c,在linux2.6下需要将其编译成.ko文件然后加载,但是从网上看到的编译方法均通不过,不何什么原因,有没有高手知道简洁一点的编译的方法,不胜感激!

12 个解决方案

#1


ldd3 中的sample 有一个很简单的可套用的模版, download 看看

#2


make menuconfig的时候把你的USB驱动编译成M的形式,首先你要让你内核支持modules才行。
然后进driver里面把USB驱动EHCI(PC上的USB2.0)选成M,如果是其他平台上的就选OHCI就是了
然后make dep;make zImage(或者make bzImage)
最后别忘了make modules;
make modules_install (INSTALL_MOD_PATH=/路径  在PC上编译可以不写这个。主要就把编译好的模块放在你的文件系统目录里)

然后就可以看到编译好的.o或者是.ko直接insmod就是了

#3


可以贴出错误信息和具体的方法,也许大家能帮上你~

#4


找个makefile文件看看

#5


贴下错误

#6


写一个Makefile文件和你的usb.c放在同一个目录下
Makefile文件内容如下:

obj-m := USB.o

KERNELDIR = /lib/modules/$(shell uname -r)/build
PWD  := $(shell pwd)



default:
make -C $(KERNELDIR) M=$(PWD) modules

install:
insmod USB.ko

uninstall:
rmmod USB

clean:
rm -f *.ko
rm -f *.o
rm -f *.mod.c
rm Module.symvers


编译的时候敲“make”,安装的时候敲“make install”,卸载的时候敲“make uninstall”,清除编译的中间文件用“make clean”

#7


楼上的是高手,学习了

#8


学习。

#9


出现这样的问题有很多原因:
1.检查驱动代码的makefile文件是否写对了
2.代码本身编译是否通过
3.编译驱动的内核版本与插入驱动的内核版本是否匹配

#10


http://www.121xia.com/article/Article13697_1.htm

个人经验教训,一定要确保内核是2.6版本的才行!

#11


Makefile文件的default:的make命令前面要先输入<TAB>键才行,<tab> 需要在命令行的第一个字符

#12


写个makefile,或者指定内核的路径去编译

#1


ldd3 中的sample 有一个很简单的可套用的模版, download 看看

#2


make menuconfig的时候把你的USB驱动编译成M的形式,首先你要让你内核支持modules才行。
然后进driver里面把USB驱动EHCI(PC上的USB2.0)选成M,如果是其他平台上的就选OHCI就是了
然后make dep;make zImage(或者make bzImage)
最后别忘了make modules;
make modules_install (INSTALL_MOD_PATH=/路径  在PC上编译可以不写这个。主要就把编译好的模块放在你的文件系统目录里)

然后就可以看到编译好的.o或者是.ko直接insmod就是了

#3


可以贴出错误信息和具体的方法,也许大家能帮上你~

#4


找个makefile文件看看

#5


贴下错误

#6


写一个Makefile文件和你的usb.c放在同一个目录下
Makefile文件内容如下:

obj-m := USB.o

KERNELDIR = /lib/modules/$(shell uname -r)/build
PWD  := $(shell pwd)



default:
make -C $(KERNELDIR) M=$(PWD) modules

install:
insmod USB.ko

uninstall:
rmmod USB

clean:
rm -f *.ko
rm -f *.o
rm -f *.mod.c
rm Module.symvers


编译的时候敲“make”,安装的时候敲“make install”,卸载的时候敲“make uninstall”,清除编译的中间文件用“make clean”

#7


楼上的是高手,学习了

#8


学习。

#9


出现这样的问题有很多原因:
1.检查驱动代码的makefile文件是否写对了
2.代码本身编译是否通过
3.编译驱动的内核版本与插入驱动的内核版本是否匹配

#10


http://www.121xia.com/article/Article13697_1.htm

个人经验教训,一定要确保内核是2.6版本的才行!

#11


Makefile文件的default:的make命令前面要先输入<TAB>键才行,<tab> 需要在命令行的第一个字符

#12


写个makefile,或者指定内核的路径去编译