内核源代码类DOC.docx
《内核源代码类DOC.docx》由会员分享,可在线阅读,更多相关《内核源代码类DOC.docx(9页珍藏版)》请在冰豆网上搜索。
内核源代码类DOC
Sourcecode:
Hello.c
#include
#include
MODULE_LICENSE("DualBSD/GPL");
staticinthello_init(void)
{
printk(KERN_ALERT"Hello,world\n");
return0;
}
staticvoidhello_exit(void)
{
printk(KERN_ALERT"Goodbye,cruelworld\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
obj-m:
=hello.o
K_DIR=$(shelluname-r)
PWD=$(shellpwd)
all:
make-C/lib/modules/$(K_DIR)/buildM=$(PWD)modules
clean:
make-C/lib/modules/$(K_DIR)/buildM=$(PWD)clean
如果模块有多个文件,可以这样写
obj-m:
=scull.o
scull-objs:
=main.opipe.oaccess.o
将生成scull.ko模块
模块安装:
insmodhello.ko
显示已装载的模块:
lsmod
模块卸载:
rmmodhello
编译环境fedro9kernel2.6.25-14.fc9.i686
安装内核源码包:
rpm–Uvhkernel-2.6.25-14.fc9.i686.src.rpm
这个命令将RPM内容写到路径/usr/src/redhat/SOURCE
我把代码2.6.25解到/usr/src/kernels/2.6.25-14.fc9.i686下,这和我的模块编译用的Makefile有关。
可能遇到的问题
1.出现很多编译错误
到kernel所在目录执行makeprepare/makeconfig,这是没有配置好源码树的原因。
可能还需要KBUILD
2.错误提示:
/bin/sh:
scripts/mod/modpost:
Nosuchfileordirectory
出现这样的错误,说明scripts下没有生成相应的文件MODPOST,cd到kernel所在目录,执行:
makescripts
3.安装时失败,提示invalidmoduleformat,多是因为编译依据的内核与操作系统不一致(装载时会做很多检查,比如是否支持SMP,这些都是通过makeconfig设置的,也可以将/boot/config-2.6.25-14.fc9.i686拷贝到内核源代码目录下如/usr/src/kernels/2.6.25-14.fc9.i686),首先要保证内核与操作系统一致。
然后,需要修改kernel源代码根目录下的Makefile
EXTRAVERSION=-14.fc9.i686(这个值根据uname–r的返回结果修改,我的为2.6.25-14.fc9.i686)
4.如果没有看到打印信息可以到文件/var/log/messages中去找
Fedora9中安装VmwareTools安装失败问题2012-02-2620:
16:
18
分类:
嵌入式
今天我在Fedora9中安装VMwareTools的时候出现以下问题(一路回车过来):
WhatisthelocationofthedirectoryofCheaderfilesthatmatchyourrunningkernel?
[/usr/src/linux/include]
Thepath"/usr/src/linux/include"isnotanexistingdirectory.
网上查找资料后得知出现这样的错误的主要原因是VMware无法找到内核的头文件,或者内核的头文件和当前的内核不相符,顺便查看目录/usr/src/根本没有linux这个目录,只有/usr/src/redhat.
最终解决方案如下:
第一步:
下载相应的kerneldevel包(即后面下载的kernel-devel-2.6.25-14.fc9.i686.rpm)先查看下内核版本号
[root@localhost~]#uname-r
2.6.25-14.fc9.i686
[root@localhost~]#rpm-qkernel-i686-devel//-q使用询问模式,当遇到任何问题时,rpm指令会先询问用户。
packagekernel-xen-develisnotinstalled
这是i686的内核,所以,要安装对应版本号的kernel-i686-develrpm包:
下载地址:
第二步:
安装kernel-devel-2.6.25-14.fc9.i686.rpm
现在遇到个问题,怎么把PC机下载的文件放到虚拟机里面去,因为vmwaretools没安装失败,不能用共享哪种方式了,这里借助于虚拟光驱UltraISO将kerc6.rpm另存为kernel-devel-2.6.25-14.fc9.i686.iso,然后再用虚拟机加载ISO文件,就可以在虚拟光驱的光驱里面看到kernel-devel-2.6.25-14.fc9.i686.rpm文件了
把kernel-devel-2.6.25-14.fc9.i686.rpm复制到/usr/src目录下面
[root@localhost~]#rpm-ivhkernel-devel-2.6.25-14.fc9.i686.rpm
//-v显示指令执行过程-i安装rpm包-h或--hash安装时列出标记#
完成安装后,在/usr/src/下已经多出了一个kernels目录
注意:
如果你解压后发现在/usr/src目录下没有kernels目录,但是有个usr目录,请把usr目录下的kernels
复制到/usr/src目录下(网友遇到情况)
[root@localhostsrc]#cdkernels
[root@localhostkernels]#ls
2.6.20-2925.9.fc7.i686.rpm
表明kernel-xen-devel已经装好了
再次使用vmware-install.pl安装,
./vmware-install.pl
就一直enter,装完VMwareTools
(可自动找到配套的thedirectoryofCheaderfiles了,哈)
在安装的最后阶段,会出现:
DoyouwanttochangeyourguestXresolution?
(yes/no)[no]y
Pleasechooseoneofthefollowingdisplaysizes(1-13):
[1]"640x480"
[2]<"800x600"
[3]"1024x768"
[4]"1152x864"
[5]"1280x800"
[6]"1152x900"
[7]"1280x1024"
[8]"1376x1032"
[9]"1400x1050"
[10]"1680x1050"
[11]"1600x1200"
[12]"1920x1200"
[13]"2364x1773"
Pleaseenteranumberbetween1and13:
[3]
重启系统reboot,OK了
Sentimental
编译时内核怎么生成的ko文件?
2012-05-0622:
40:
37
发信人:
Sentimental(Sentimental),信区:
Embedded
标题:
编译时内核怎么生成的ko文件?
发信站:
水木社区(SunMay622:
40:
372012),站内
编译时内核怎么生成的ko文件?
接我的上一贴,我用的是嵌入式Linux,在内核生成modules时出现问题。
1首先我在makemenuconfig时选择了我想编译进内核的模块,比如CONFIG_USB_SERIAL,CONFIG_USB_STORAGE。
2编译内核成功
3make*modules
4makemodulemodule_install
但是在我的开发板$(target)/lib/modules/(version)/kernel中却只有STORAGE的ko文件。
回到内核中查看,~usb/storage中生成了ko但是~usb/serial中只有o没有ko,说明根本没有生成。
比较了两个文件夹的Kconfig与Makefile,发现木有大的功能上的差别,也没有提到模块的生成问题。
查看了一下根目录的.config中CONFIG_USB_SERIAL明明定义了的,auto.conf也定义了。
现在实在不明白为什么没有生成我配置了的ko文件?
在哪里改定义?
估计现在生成以及安装的模块可能都是某个文件中默认的,不过在哪里改?
希望板上大牛指教,或者交流一下!
先多谢!
※来源:
·水木社区·[FROM:
220.181.118.*]
lm
Re:
编译时内核怎么生成的ko文件?
2012-05-0709:
52:
35
发信人:
lm(lm),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay709:
52:
352012),站内
生成ko文件,要makemenuconfig的时候模块选择为“M”吧
※来源:
·水木社区·[FROM:
210.160.252.*]
Sentimental
Re:
编译时内核怎么生成的ko文件?
2012-05-0712:
28:
17
发信人:
Sentimental(Sentimental),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay712:
28:
172012),站内
你好,
我想问一下设成y与设成M有什么区别?
有次我看网上说使用SCSI时设为y比较好,这些也设成y了
【在lm的大作中提到:
】
:
生成ko文件,要makemenuconfig的时候模块选择为“M”吧
WinterChen
Re:
编译时内核怎么生成的ko文件?
2012-05-0712:
38:
39
发信人:
WinterChen(Xiaohu),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay712:
43:
402012),站内
请参考{LINUX_DIR}/Documentation/kbuild/makefiles.txt
m就是把该“功能”编译生成*.ko,需要手动insmod,loader负责运行相应的init_modu
le。
优点是灵活
y就是把该“功能”编译进内核,内核启动时自动运行相应的init_module()。
优点是自
动
【在Sentimental(Sentimental)的大作中提到:
】
:
你好,
:
我想问一下设成y与设成M有什么区别?
有次我看网上说使用SCSI时设为y比较好,这些也设成y了
※修改:
·WinterChen于May712:
44:
412012修改本文·[FROM:
61.148.17.*]
※来源:
·水木社区·[FROM:
61.148.17.*]
Sentimental
Re:
编译时内核怎么生成的ko文件?
2012-05-0713:
03:
38
发信人:
Sentimental(Sentimental),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay713:
03:
382012),站内
你好,非常感谢!
我之前自编了简单的UART小驱动,先insmod,再mknod,然后在测试程序中fd=open("/dev/uart",0_RDWR).
我将小驱动的文件夹放到内核文件下的/drivers下并建立Kconfig与Makefile。
如果我选择M,那么与之前的操作还是一样的吧?
insmod,mknod
如果我选择y,那么就不用insmod,但是还得分配节点是么?
内核能不能自动分配节点?
【在WinterChen的大作中提到:
】
:
请参考{LINUX_DIR}/Documentation/kbuild/makefiles.txt
:
m就是把该“功能”编译生成*.ko,需要手动insmod,loader负责运行相应的init_modu
:
le。
优点是灵活
:
...................
Sentimental
Re:
编译时内核怎么生成的ko文件?
2012-05-0713:
07:
21
发信人:
Sentimental(Sentimental),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay713:
07:
212012),站内
还有个问题
我的USB-storage一直选得是M而不是y,但是我没有手动加载,开机就可以查U盘并读写文件。
而自己的uart为什么要手动加载呢?
【在WinterChen的大作中提到:
】
:
请参考{LINUX_DIR}/Documentation/kbuild/makefiles.txt
:
m就是把该“功能”编译生成*.ko,需要手动insmod,loader负责运行相应的init_modu
:
le。
优点是灵活
:
...................
※来源:
·水木社区·[FROM:
220.181.118.*]
lm
Re:
编译时内核怎么生成的ko文件?
2012-05-0714:
51:
30
发信人:
lm(lm),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay714:
51:
302012),站内
设成Y就直接编译到kernel的image中
设置为M,编译为ko文件
【在Sentimental的大作中提到:
】
:
你好,
:
我想问一下设成y与设成M有什么区别?
有次我看网上说使用SCSI时设为y比较好,这些也设成y了
:
※来源:
·水木社区·[FROM:
210.160.252.*]
WinterChen
Re:
编译时内核怎么生成的ko文件?
2012-05-0716:
29:
11
发信人:
WinterChen(Xiaohu),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay716:
33:
192012),站内
我不知啊。
你查一下自动运行的脚本(inittab开始),是不是某个脚本里insmod并mount了
【在Sentimental(Sentimental)的大作中提到:
】
:
还有个问题
:
我的USB-storage一直选得是M而不是y,但是我没有手动加载,开机就可以查U盘并读写文件。
:
而自己的uart为什么要手动加载呢?
:
...................
※来源:
·水木社区·[FROM:
61.148.17.*]
WinterChen
Re:
编译时内核怎么生成的ko文件?
2012-05-0716:
35:
46
发信人:
WinterChen(Xiaohu),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay716:
38:
492012),站内
1如果你的Kconfig和Makefile写得对,是这样的。
2但是还得分配节点是么?
内核能不能自动分配节点?
设备文件(节点)在根文件系统中,所以只要mknod一次就可以了,并不需要每次启动都
处理。
【在Sentimental(Sentimental)的大作中提到:
】
:
你好,非常感谢!
:
我之前自编了简单的UART小驱动,先insmod,再mknod,然后在测试程序中fd=open("/dev/uart",0_RDWR).
:
我将小驱动的文件夹放到内核文件下的/drivers下并建立Kconfig与Makefile。
:
...................
※来源:
·水木社区·[FROM:
61.148.17.*]
Sentimental
Re:
编译时内核怎么生成的ko文件?
2012-05-0721:
02:
42
发信人:
Sentimental(Sentimental),信区:
Embedded
标题:
Re:
编译时内核怎么生成的ko文件?
发信站:
水木社区(MonMay721:
02:
422012),站内
好的多谢
【在WinterChen的大作中提到:
】
:
1如果你的Kconfig和Makefile写得对,是这样的。
:
2但是还得分配节点是么?
内核能不能自动分配节点?
:
设备文件(节点)在根文件系统中,所以只要mknod一次就可以了,并不需要每次启动都