参考资料
http://blog.csdn.net/zhangnn5/article/details/6766693
下载Linux源码
安装编译内核所需软件包1
2apt-get update
apt-get install build-essential kernel-package libncurses5-dev fakeroot 选择Y
在官网下载源码包:
http://www.kernel.org/pub/linux/kernel/v3.x/linux-1.1.1.tar.xz
配置内核
放到/usr/src文件夹下,解压:
1 | cd /usr/src |
编译配置内核
1 | cd linux-3.19.3 (cd命令进入源码目录) |
安装新内核
1 | make modules_install (安装模块) |
启动新内核
1 | /etc/default/grub |
将自己写的驱动编译进内核
- 将自己写的Monitor文件夹添加到/usr/src/linux-3.1.1/driver/net/
修改/driver/net/目录下的Kconfig文件,在E1000项的下面增加:
1
2
3config MONITOR
tristate "OSLab(R) MyMonitor driver"
default m修改/driver/net/Makefile为:
1
obj-$(CONFIG_MONITOR) += Monitor/
修改/driver/net/Monitor/Makefile为:
1
obj-$(CONFIG_MONITOR) += MyMonitor.o
执行make menuconfig时找到MONITOR对应的描述“OSLab(R) MyMonitor driver”,选择y即可编译进内核,选m即可动态加载进内核
总结:
- make menuconfig读取Kconfig的内容然后让用户选择编译方式,用户选择完毕后生成linux-3.1.1/.config文件
- linux-3.1.1/.config文件里面定义了如“CONFIG_SKY2=m”这样的行。
- /driver/net/Makefile文件里面定义了如”obj-$(CONFIG_SKY2) += sky2.o”这样的行。
文件介绍
vmlinuz是可引导的、压缩的内核
initrd.img的作用:initrd.img是Linux启 动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定 INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其它设备)。如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告”kernel panic: VFS: Unable to mount root fs on 08:06”的错误。
make modules_install将把编译之后的模块放到/lib/modules/
系统启动自动加载模块
vim /etc/modules,加入新的一行,写要自动加载的模块名
内核模块参考资料:
浅谈linux中的模块加载
Kernel modules (简体中文))