内核源代码类DOC.docx

上传人:b****9 文档编号:25777969 上传时间:2023-06-13 格式:DOCX 页数:9 大小:61.50KB
下载 相关 举报
内核源代码类DOC.docx_第1页
第1页 / 共9页
内核源代码类DOC.docx_第2页
第2页 / 共9页
内核源代码类DOC.docx_第3页
第3页 / 共9页
内核源代码类DOC.docx_第4页
第4页 / 共9页
内核源代码类DOC.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

内核源代码类DOC.docx

《内核源代码类DOC.docx》由会员分享,可在线阅读,更多相关《内核源代码类DOC.docx(9页珍藏版)》请在冰豆网上搜索。

内核源代码类DOC.docx

内核源代码类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一次就可以了,并不需要每次启动都

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1