且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《精通Linux设备驱动程序开发》——1.7 编译内核

更新时间:2022-08-14 19:51:22

本节书摘来自异步社区《精通Linux设备驱动程序开发》一书中的第1章,第1.7节,作者:【印】Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.7 编译内核

了解了内核源码树布局后,现在我们来对代码稍做修改,并编译和运行它。进入位于顶层的init/目录,对初始化文件main.c做一项小的修改,即在start_kernel()函数的开头加上一行打印信息,宣布你对北极熊的喜爱:

asmlinkage void __init start_kernel(void)
{
  char *command_line;
  extern struct kernel_param __start___param[],
      __stop___param[];

+  printk("Penguins are cute, but so are polar bears\n");

  /* ... */

  rest_init();
}

编译内核准备工作已经就绪,进入内核源码树并运行清除命令:

bash> cd /usr/src/linux-X.Y.Z/
bash> make clean

接下来进行内核配置工作。这一步的主要工作是选择要编译的组件,你可以指定需要的组件以静态还是动态链接的方式编译进内核:

bash> make menuconfig
menuconfig是内核配置菜单的文本界面,使用make xconfig可以产生一个图形界面。所选择的配置信息被存放在内核源码树根目录的.config文件中。如果不想从头开始进行配置,可以使用 arch/your-arch/defconfig作为起点或者若你的体系架构支持多个平台,也可以用)arch/your-arch/ configs/your-machine_defconfig文件作为起点。因此,如果正在为32位x86体系架构编译内核,运行如下命令:

bash> cp arch/x86/configs/i386_defconfig .config
编译内核并产生一个压缩的启动映像:

bash> cp arch/x86/boot/bzImage /boot/vmlinuz
现在,内核映像将位于arch/x86/boot/bzImage,更新启动分区:

bash> /sbin/lilo
Added linux *

也许需要根据新的启动映像更新引导程序。如果正在使用GRUB这个引导程序,它将自动完成配置;如果正在使用LILO,请增加一个标记:

**<pre class="代码无行号"><code><strong>****bash> /sbin/lilo**</strong>
Added linux *
</code></pre>

最后,重新启动Linux并启动到新内核:

bash> reboot
启动后的第一条信息显示了你添加的喜爱北极熊的那句话。