配置编译内核(Linux kernel)

来源:互联网 发布:淘宝创业故事视频 编辑:程序博客网 时间:2024/05/22 14:33

       虽然以前也编译过内核,但是关于内核配置选项特别是有关本机驱动这块还是不熟悉,因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件,最近看到一本书《Linux kernel in a netshell》,感觉讲的还不错,所以记下笔记。

1.编译内核的工具
    gcc
    binutils(ld)    binutils是gcc的工具链,用来链接目标文件以及汇编。
    make   
    util-linux-ng(fdformat)   
    module-init-tools(depmod)
    tune2fs
    NFS(showmount)
    udev        udev是Linux中用来管理/dev目录的工具,它维护/dev目录下所有的设备文件。

2.下载wget/curl

3.编译
    $make defconfig    defconfig是i386计算机上的默认配置,也就是Linus Torvalds计算机中的配置。
    $make config        最原始的配置方式
    $make menuconfig    文本字符界面配置
    $make xconfig    X Window配置界面
    $make            编译Kernel

4.高级编译选项
    make -jN        N设置为你CPU内核数的两倍,代表编译内核所用的线程数量。
    $make drivers/usb/serial    只编译目录drivers/usb/serial,但是不会生成模块映像文件
    $make M=drivers/usb/serial    同上,但是会生成模块文件,但是不会影响已经编译好的内核,如果想要改变已经编译好的内核,则需要重新执行
    $make
    $make drivers/usb/serial/visor.ko    只编译个别文件
    $make -O=/path/to/output/    将输出重定向到另一个目录,注意configure也必须使用-O重定向输出。
    $make ARCH=x86_64 defconfig    设置目标计算机体系结构
    $make ARCH=arm CROSS_COMPILE=/usr/bin/...    设置交叉编译。
    $make CC="ccache gcc"    设置编译器变量CC


5.配置内核
    1)查找当前内核配置文件.config,在许多发行版中,内核配置文件最有可能位于/usr/src/linux/下和/proc/config.gz文件。例如在我的ubuntu(karmic koala)中,有/usr/src/linux-headers-2.6.31-16-generic/.config
    2)查看特定驱动的模块
这里以网卡为例,使用ifconfig可以看到本机网卡,lo是回环地址,eth0...等是真正工作的网卡。
    $ifconfig
    $ls /sys/class/net/
上面两种方法都可以查看本机网卡。现在我们要找到网卡驱动在内核中使用哪个模块来控制。
    3)找到相应的内核模块
    $basename `readlink /sys/class/net/eth0/device/driver/module`
    在我的电脑上输出是8139too,表示网卡驱动模块名是8139too。
    4)查找相应模块在配置内核中的选项
    $cd /usr/src/linux-headers-2.6.31-16/    注意这里不是16-generic,因为后者是中的大部分都是前者的链接。
    $find -type f -iname "makefile"|xargs grep -i "8139too"
输出是./drivers/net/Makefile:obj-$(CONFIG_8139TOO) +=8139too.o
    5)配置内核中的选项
    $make menuconfig
    然后按下'/‘键,输入搜索内容8139too,即可得到相关的配置选项。

原创粉丝点击