安装内核源代码(驱动学习)
2009-08-19 21:17
357 查看
安装内核源码包:
1.# rpm –Uvh kernel-2.6.11-1.1369_FC4.src.rpm
这个命令将 RPM 内容写到路径
/usr/src/redhat/SOURSE
和
/usr/src/redhat/SPECS
2. build源码包:
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
这个命令将会把内核源码树放到 目录
/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686
3. 配置内核:
Fedora Core 附带的内核配置文件在
~/kernel-2.6.11.686/configs/ 目录。
例如,i686 SMP 配置文件被命名为
configs/kernel-version-i686-smp.config。
使用下列命令来将需要的配置文件复制到合适的位置,用来编译:
# cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
# cp configs/kernel-version-i686-smp.config .config //记住
要养成备份的好习惯!
您也可以在 /lib/modules/version/build/.config 这个位置找到与
您当前的内核匹配的 .config 文件。
注意:
您的内核必须已经启用这些选项进行了编译(用make menuconfi
g调出内核配置菜单):u
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
[ ] Module versioning support (EXPERIMENTAL)
[*] Automatic kernel module loading
4. 稍微更改一下Makefile:
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示
的值。内核Makefile 的前四行定义了内核的名字。为了保护官方的
内核不被破坏,Makefile
经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插
入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,
您必须编辑内核的Makefile。
例如,如果 uname -r 返回字符串 2.6.11-1.1369_FC4,就将 EX
TR***ERSION 定义从:
EXTR***ERSION = -prep
修改为:
EXTR***ERSION = -1.1369_FC4
也就是最后一个连字符后面的所有内容。
5. 编译内核:
跟普遍的编译方法一样了:
# make bzImage 编译内核
# make modules 编译模块
# make modules_install 安装编译
6. 完成“内核树”的安装:
目录“/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686/”
中就是所谓的“内核代码树”
但是“/lib/modules/2.6.11-1.1369_FC4/build”是个符号链接,也
指向这个目录,所以这里也可以叫做“内核代码树”
7. 编写内核模块源文件:
// hello.c
#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);
编写makefile
ifneq ($(KERNELRELEASE),) //别把逗号忘了;
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules //-c为大写;
endif
10. 执行make命令进行编译就行了, 执行完毕后,会生成几个文
件:
hello.ko
hello.mod.c
hello.mod.o
hello.o
运行命令:
# insmod hello.ko
应该可以看到返回的信息:Hello, world
然后再运行命令:
# rmmod hello
应该可以看到返回的信息:Goodbye, cruel world
小提示:如果没有看到信息到/var/log/messages中你就会看到,
bye!
1.# rpm –Uvh kernel-2.6.11-1.1369_FC4.src.rpm
这个命令将 RPM 内容写到路径
/usr/src/redhat/SOURSE
和
/usr/src/redhat/SPECS
2. build源码包:
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
这个命令将会把内核源码树放到 目录
/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686
3. 配置内核:
Fedora Core 附带的内核配置文件在
~/kernel-2.6.11.686/configs/ 目录。
例如,i686 SMP 配置文件被命名为
configs/kernel-version-i686-smp.config。
使用下列命令来将需要的配置文件复制到合适的位置,用来编译:
# cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
# cp configs/kernel-version-i686-smp.config .config //记住
要养成备份的好习惯!
您也可以在 /lib/modules/version/build/.config 这个位置找到与
您当前的内核匹配的 .config 文件。
注意:
您的内核必须已经启用这些选项进行了编译(用make menuconfi
g调出内核配置菜单):u
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
[ ] Module versioning support (EXPERIMENTAL)
[*] Automatic kernel module loading
4. 稍微更改一下Makefile:
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示
的值。内核Makefile 的前四行定义了内核的名字。为了保护官方的
内核不被破坏,Makefile
经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插
入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,
您必须编辑内核的Makefile。
例如,如果 uname -r 返回字符串 2.6.11-1.1369_FC4,就将 EX
TR***ERSION 定义从:
EXTR***ERSION = -prep
修改为:
EXTR***ERSION = -1.1369_FC4
也就是最后一个连字符后面的所有内容。
5. 编译内核:
跟普遍的编译方法一样了:
# make bzImage 编译内核
# make modules 编译模块
# make modules_install 安装编译
6. 完成“内核树”的安装:
目录“/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686/”
中就是所谓的“内核代码树”
但是“/lib/modules/2.6.11-1.1369_FC4/build”是个符号链接,也
指向这个目录,所以这里也可以叫做“内核代码树”
7. 编写内核模块源文件:
// hello.c
#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);
编写makefile
ifneq ($(KERNELRELEASE),) //别把逗号忘了;
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules //-c为大写;
endif
10. 执行make命令进行编译就行了, 执行完毕后,会生成几个文
件:
hello.ko
hello.mod.c
hello.mod.o
hello.o
运行命令:
# insmod hello.ko
应该可以看到返回的信息:Hello, world
然后再运行命令:
# rmmod hello
应该可以看到返回的信息:Goodbye, cruel world
小提示:如果没有看到信息到/var/log/messages中你就会看到,
bye!
相关文章推荐
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- Linux内核驱动学习(一)----内核简介 | 配置 | 编译| 安装(PC平台下)
- 在Ubuntu上下载编译安装Android最新内核源代码
- 嵌入式Linux驱动学习之路(六)u-boot启动内核
- Linux内核驱动学习之锁
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 内核编译安装学习笔记
- linux块设备驱动学习笔记(源码适用高版本内核)
- 树莓派学习笔记—— 源代码方式安装opencv
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--互斥篇
- linux驱动学习(二)——内核模块
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 在Ubuntu上下载、编译和安装Android 4.2 最新内核源代码(Linux Kernel)
- 面对不断升级的内核,如何学习linux设备驱动
- Windows内核驱动开发入门学习资料
- 移植驱动到内核学习笔记2-----LED和按键驱动
- linux2.6内核驱动开发学习(1)
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 移植驱动到内核学习笔记3-----LCD及输入系统
- USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写