网站开发实验报告,wordpress科技企业主题,有项目找资金的平台,微信app免费下载安装虽然以前也编译过内核#xff0c;但是关于内核配置选项特别是有关本机驱动这块还是不熟悉#xff0c;因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件#xff0c;最近看到一本书《Linux kernel in a netshell》#xff0c;感觉讲的还…虽然以前也编译过内核但是关于内核配置选项特别是有关本机驱动这块还是不熟悉因为没有通过确定有效的途径知道当前工作正常的内核中到底使用了什么驱动模块来控制硬件最近看到一本书《Linux kernel in a netshell》感觉讲的还不错所以记下笔记。1.编译内核的工具gccbinutils(ld) binutils是gcc的工具链用来链接目标文件以及汇编。makeutil-linux-ng(fdformat)module-init-tools(depmod)tune2fsNFS(showmount)udev udev是Linux中用来管理/dev目录的工具它维护/dev目录下所有的设备文件。2.下载wget/curl3.编译$make defconfig defconfig是i386计算机上的默认配置也就是Linus Torvalds计算机中的配置。$make config 最原始的配置方式$make menuconfig 文本字符界面配置$make xconfig X Window配置界面$make 编译Kernel4.高级编译选项make -jN N设置为你CPU内核数的两倍代表编译内核所用的线程数量。$make drivers/usb/serial 只编译目录drivers/usb/serial但是不会生成模块映像文件$make Mdrivers/usb/serial 同上但是会生成模块文件但是不会影响已经编译好的内核如果想要改变已经编译好的内核则需要重新执行$make$make drivers/usb/serial/visor.ko 只编译个别文件$make -O/path/to/output/ 将输出重定向到另一个目录注意configure也必须使用-O重定向输出。$make ARCHx86_64 defconfig 设置目标计算机体系结构$make ARCHarm CROSS_COMPILE/usr/bin/... 设置交叉编译。$make CCccache gcc 设置编译器变量CC5.配置内核 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即可得到相关的配置选项。