Linux内核编程实战经验谈[1]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:


  当前,在国产自主版权的操作系统这面大旗的倡导下,IT界掀起了一浪高过一浪的Linux编程热潮。Linux以其源码开放、配置灵活等不可多得的优越性吸引着越来越多的编程爱好者深入Linux的内核开发。笔者近来实践过一个Linux的实时化改造课题任务,积累了一点Linux内核编程的实战经验,在这里想就编译内核、增加系统调用等方面的问题和感兴趣的爱好者共做切磋。
  
  编译内核
  
   在Linux编程的实践中,经常会遇到编译内核的问题。为什么要编译内核呢?其一,可以定制内核模块。Linux引入了“动态载入模块”的概念,使用户可以把驱动程序以及非必要的内核功能代码编译成“模块”,由系统在需要时动态载入,不需要时自动卸载,从而提高了系统的效率和灵活性。其二,可以定制系统功能。当添加某种设备时、增加系统功能时、系统暴露出缺陷需要打“补丁”时,当新版内核出现准备用来升级时,编译内核是不可避免的。而且,编译内核正是Linux独有的“系统级DIY”的魅力所在!
  
  好,现在就让我们一起开始——编译内核!
  
  (1)安装源码
  首先要确定自己Linux系统是否已安装了内核源码:
  # rpm -q kernel-source
  kernel_source-2.2.5-16
  如果证实没有安装,则需要找来安装盘或从网上下载kernel-source-2.2.5-15.i386.rpm并安装:
  # rpm -Uhv kernel-source-2.2.5-15.i386.rpm
  如果是升级到新版本,则需要找来升级包(linux-2.2.16.tar.gz),自己解压安装:
  # cd /usr/src
  进入源码目录。
  # rm -rf linux
  删除以前的链接。
  # tar xzvf linux-2.2.16.tar.gz
  解压升级包。
  # ln -s linux-2.2.16 linux
  重建目录链接。
  
  (2)配置内核
  进入内核源码所在目录:
  # cd /usr/src/linux
  先清除多余的(一般是以前编译生成的)文件
  # make mrproper
  开始配置内核(如果对各选项不是很熟悉的话,建议按回车键):
  # make config
  
  (3)编译内核
  清除以前生成的目标文件及其他文件
  # make clean
  理顺各文件之间的依存关系:
  # make dep
  编译压缩的内核:
  # make bzImage
  编译模块:
  # make modules-install
  
  (4)装新内核
  将新内核文件复制到用于存放启动文件的 /boot目录:
  # cp /usr/src/linux/System.map /boot/System.new
  # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz.new
  进入启动目录:
  # cd /boot
  给新内核建立链接:
  # rm System.map
  # ln -s System.new System.map
  # rm vmlinuz
  # ln -s vmlinuz.new vmlinuz
  编辑LILO的配置文件/etc/lilo.conf ,使LILO能启动新内核:
  # vi /etc/lilo.conf
  在文件末加入以下部分:(后两行内容要与旧内核相应行保持一致)
  image=/boot/vmlinuz.new
  lable=new
  root=/dev/hda3
  read-only
  重写LILO的启动扇区,使改动生效:
  # lilo
  
  (5)重启系统
  # reboot
  当重启后出现 lilo: 提示时输入新内核的标号(按TAB键可显示所有的标号):
  lilo: new
  OK!!boot new......
  .....
  一切运行正常,新内核引导成功!
  以上步骤在pentium Ⅲ/64M/20G、Red Hat Linux 6.0(2.2.5-15)机上测试通过。
  
  增加系统调用
  

本文关键:Linux内核编程实战经验谈
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top