如何开发Linux内核?



如何开发Linux内核?

推荐这篇文章:

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

下面是在Ubuntu下的输出:

root@myhostname  # make
make: Warning: File `Makefile' has modification time 11 s in the future
make -C /lib/modules/3.13.0-24-generic/build M=/root modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-24-generic'
make[2]: Warning: File `/root/Makefile' has modification time 10 s in the future
  CC [M]  /root/hello-1.o
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
  Building modules, stage 2.
make[2]: Warning: File `/root/Makefile' has modification time 8.9 s in the future
  MODPOST 1 modules
  CC      /root/hello-1.mod.o
  LD [M]  /root/hello-1.ko
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-24-generic'
make: warning:  Clock skew detected.  Your build may be incomplete.

~
root@myhostname  # ls
A    B.c        hello-1.ko     hello-1.o  modules.order             MyFirstJavaProgram.java
A.c  dns        hello-1.mod.c  IP.txt     Module.symvers            SumOfN-thPowersIsAnN-thPower
B    hello-1.c  hello-1.mod.o  Makefile   MyFirstJavaProgram.class  SumOfN-thPowersIsAnN-thPower.c

~
root@myhostname  # insmod ./hello-1.ko

~
root@myhostname  # cat /var/log/kern.log
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312610] hello_1: module license 'unspecified' taints kernel.
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312617] Disabling lock debugging due to kernel taint
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312641] hello_1: module verification failed: signature and/or  required key missing - tainting kernel
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.313139] Hello world 1.

~
root@myhostname  # cat /proc/modules
hello_1 12426 0 - Live 0xffffffffa01e9000 (POF)
nls_iso8859_1 12713 0 - Live 0xffffffffa01e4000
joydev 17381 0 - Live 0xffffffffa0183000
hid_generic 12548 0 - Live 0xffffffffa01db000
udf 89723 0 - Live 0xffffffffa01c4000
crc_itu_t 12707 1 udf, Live 0xffffffffa01bf000
psmouse 102222 0 - Live 0xffffffffa01a5000
serio_raw 13462 0 - Live 0xffffffffa017e000
hid_hyperv 13059 0 - Live 0xffffffffa012e000
hyperv_keyboard 12777 0 - Live 0xffffffffa00c6000
hid 106148 2 hid_generic,hid_hyperv, Live 0xffffffffa018a000
nfsd 280297 2 - Live 0xffffffffa0135000
auth_rpcgss 59338 1 nfsd, Live 0xffffffffa011e000
nfs_acl 12837 1 nfsd, Live 0xffffffffa00c1000
nfs 236636 0 - Live 0xffffffffa00e3000
hyperv_fb 17593 1 - Live 0xffffffffa00bb000
i2c_piix4 22155 0 - Live 0xffffffffa00b0000
lockd 93977 2 nfsd,nfs, Live 0xffffffffa00cb000
mac_hid 13205 0 - Live 0xffffffffa004f000
sunrpc 284404 6 nfsd,auth_rpcgss,nfs_acl,nfs,lockd, Live 0xffffffffa0069000
fscache 63988 1 nfs, Live 0xffffffffa0058000
lp 17759 0 - Live 0xffffffffa0028000
parport 42348 1 lp, Live 0xffffffffa0043000
hv_utils 19003 0 - Live 0xffffffffa003d000
hv_storvsc 17785 2 - Live 0xffffffffa0010000
hv_vmbus 50383 5 hid_hyperv,hyperv_keyboard,hyperv_fb,hv_utils,hv_storvsc, Live 0xffffffffa002f000
floppy 69370 0 - Live 0xffffffffa0016000
tulip 59672 0 - Live 0xffffffffa0000000

~
root@myhostname  # rmmod hello-1

~
root@myhostname  # cat /proc/modules
nls_iso8859_1 12713 0 - Live 0xffffffffa01e4000
joydev 17381 0 - Live 0xffffffffa0183000
hid_generic 12548 0 - Live 0xffffffffa01db000
udf 89723 0 - Live 0xffffffffa01c4000
crc_itu_t 12707 1 udf, Live 0xffffffffa01bf000
psmouse 102222 0 - Live 0xffffffffa01a5000
serio_raw 13462 0 - Live 0xffffffffa017e000
hid_hyperv 13059 0 - Live 0xffffffffa012e000
hyperv_keyboard 12777 0 - Live 0xffffffffa00c6000
hid 106148 2 hid_generic,hid_hyperv, Live 0xffffffffa018a000
nfsd 280297 2 - Live 0xffffffffa0135000
auth_rpcgss 59338 1 nfsd, Live 0xffffffffa011e000
nfs_acl 12837 1 nfsd, Live 0xffffffffa00c1000
nfs 236636 0 - Live 0xffffffffa00e3000
hyperv_fb 17593 1 - Live 0xffffffffa00bb000
i2c_piix4 22155 0 - Live 0xffffffffa00b0000
lockd 93977 2 nfsd,nfs, Live 0xffffffffa00cb000
mac_hid 13205 0 - Live 0xffffffffa004f000
sunrpc 284404 6 nfsd,auth_rpcgss,nfs_acl,nfs,lockd, Live 0xffffffffa0069000
fscache 63988 1 nfs, Live 0xffffffffa0058000
lp 17759 0 - Live 0xffffffffa0028000
parport 42348 1 lp, Live 0xffffffffa0043000
hv_utils 19003 0 - Live 0xffffffffa003d000
hv_storvsc 17785 2 - Live 0xffffffffa0010000
hv_vmbus 50383 5 hid_hyperv,hyperv_keyboard,hyperv_fb,hv_utils,hv_storvsc, Live 0xffffffffa002f000
floppy 69370 0 - Live 0xffffffffa0016000
tulip 59672 0 - Live 0xffffffffa0000000

~
root@myhostname  # cat /var/log/kern.log
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312610] hello_1: module license 'unspecified' taints kernel.
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312617] Disabling lock debugging due to kernel taint
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.312641] hello_1: module verification failed: signature and/or  required key missing - tainting kernel
Feb  2 00:48:18 cmt-ub14x64-02 kernel: [8216591.313139] Hello world 1.
Feb  2 00:53:10 cmt-ub14x64-02 kernel: [8216883.303516] Goodbye world 1.

时间: 2024-10-31 13:14:23

如何开发Linux内核?的相关文章

《Android深度探索(卷1):HAL与驱动开发》——1.4节 Linux内核版本号的定义规则

1.4 Linux内核版本号的定义规则Android深度探索(卷1):HAL与驱动开发Linux内核版本号由下面几部分组成.主版本号:次版本号:修订版本号:微调版本号:为特定的Linux系统特别调校的描述.在Linux内核版本2.6.29.7-flykernel-12a中,2是主版本号,6是次版本号,29是修订版本号,7是对2.6.29的微调,称为微调版本号,而flykernel-12a则是该Linux内核专门为flykernel调校.要注意的是,调校描述可以是任意字符串,由开发者自行定义.主版

Linux的历史----Linux内核剖析(一)

Unix操作系统 Unix的由来 汤普逊和里奇最早是在贝尔实验室开发Unix的,此后的10年,Unix在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的"Unix变种",这些变种反过来也促进了Unix的发展,其中最著名的变种之一是由加州大学柏克莱分校开发的BSD产品. 后来AT&T意识到了Unix的商业价值,不再将Unix源码授权给学

Linux内核开发工具介绍

进行嵌入式Linux产品开发,往往需要对内核进行裁剪和定制,以满足嵌入式产品的功能和性能需求.本文介绍几种阅读Linux内核源码的工具和方法. 这里所说的"Linux内核开发"仅仅是指嵌入式Linux产品开发中内核和驱动相关开发工作,与Linux所领导的内核开发团队的内核开发有很大不同. 俗话说"工欲善其事,必先利其器",面对几百兆的Linux内核代码,要阅读.查看或者搜索其中的代码,大部分初次接触到Linux内核代码的开发人员,都有无从下手的感觉.下面推荐几个源码

《Linux设备驱动开发详解 A》一一3.1 Linux内核的发展与演变

3.1 Linux内核的发展与演变 Linux操作系统是UNIX操作系统的一种克隆系统,是一种类UNIX操作系统,诞生于1991年10月5日(第一次正式向外公布的时间),起初的作者是Linus Torvalds.Linux操作系统的诞生.发展和成长过程依赖着5个重要支柱:UNIX操作系统.Minix操作系统.GNU计划.POSIX标准和Internet. 1.?UNIX操作系统 UNIX 操作系统是美国贝尔实验室的Ken. Thompson和Dennis Ritchie于1969年夏在DEC P

《Linux设备驱动开发详解 A》一一3.4 Linux内核的编译及加载

3.4 Linux内核的编译及加载 3.4.1 Linux内核的编译 Linux驱动开发者需要牢固地掌握Linux内核的编译方法以为嵌入式系统构建可运行的Linux操作系统映像.在编译内核时,需要配置内核,可以使用下面命令中的一个: make conf?ig(基于文本的最为传统的配置界面,不推荐使用) make menuconf?ig(基于文本菜单的配置界面) make xconf?ig(要求QT被安装) make gconf?ig(要求GTK+被安装) 在配置Linux内核所使用的make c

《Android深度探索(卷1):HAL与驱动开发》——1.3节查看Linux内核版本

1.3 查看Linux内核版本 Android深度探索(卷1):HAL与驱动开发 目前Linux内核主要维护3个版本:Linux 2.4.Linux 2.6和Linux 3.x,大多数Linux系统都使用了这3个版本的内核,其中Linux 2.6是目前使用最广泛的Linux内核版本,Android就使用了该内核版本.而Linux 2.4由于其内部设计缺陷(主要是进程调度上的缺陷),除了一些遗留Linux系统,已很少有新的Linux系统使用Linux 2.4了.Linux 3.x是最新推出的Lin

ZLG致远电子Linux内核开发工具介绍

众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile.如此复杂.庞大的内核源码绝不可能使用一个或几个Makefile文件来完成配置编译,而是需要一套同样复杂.庞大,且为Linux内核定制的Makefile系统. 尽管她是一个复杂的系统,但对绝大部分内核开发者来说只需要知道如何使用,而无需了解其中的细节.她对绝大部分内核开发者基本上是透明的,隐藏了大部分实现细节,有效地降低了开发者的负担,能使其能专注于内核开发,而不至于花费时间和精力在编译过程上. 1.1 Lin

为什么 Linux 内核开发仍然使用电子邮件

在日新月异的今天,Linux内核开发项目仍然依赖于古老的电子邮件和邮件列表.稳定内核维护者Greg Kroah-Hartman 指出,电子邮件仍然是管理如内核这样庞大项目的最佳方法.去年,Greg一个人就接受了9,781个补丁,而整个项目平均每小时接受8个补丁.他尝试过替代方法,但在对比之后认为电子邮件仍然是最好的方法. Greg试用过GitHub后认为它比较适合小的项目,对于大的项目并不好:它的pull request 讨论只向特定人开放,它需要网络访问,而开发者由于种种原因在工作时候未必能访

VELT-0.1.5开发:使用kgdb调试Linux内核【转】

转自:http://demo.netfoucs.com/lights_joy/article/details/44106589 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅