首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

配置和编译内核

配置和编译内核

如何根据自己系统的需求重新编译生成新的内核。编译内核是非常简单的工作,一般只要根据“/usr/src/linux/”目录下的README文件中的指示就都可以完成。为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:①自己定制编译的内核运行更快(具有更少的代码);②系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中);③不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞;④将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些。
(1)解压内核源代码到/usr/src/,注意源码目录名应该为Linux:
[root@deep]# cp linux-version_tar.gz /usr/src/
[root@deep]# cd /usr/src/
[root@deep]# tar xzpf linux-version_tar.gz
(2)修改/usr/src/linux/drivers/block/rd.c文件,使ramdisk支持所有的储存设备,而不是只支持从软盘加载文件系统。
ramdisk.c
/* Code fragment from ramdisk.c */
/* Old code - only load ramdisk if booting from floppy */
  if (MAJOR(ROOT_DEV) != FLOPPY_MAJOR
#ifdef CONFIG_BLK_DEV_INITRD
  && MAJOR(real_root_dev) != FLOPPY_MAJOR
#endif
 )
  return;
 ... code to load ramdisk from block device
/* New code - always try to load ramdisk */
  if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR
#ifdef CONFIG_BLK_DEV_INITRD
  && MAJOR(real_root_dev) == FLOPPY_MAJOR
#endif{
 
    /* Load even from hard disk */
    /* or from EPROM disk */
        printk(KERN_NOTICE "VFS: Insert ramdisk floppy and press
ENTER");
        wait_for_keypress();
    }
 ... code to load ramdisk from block device


(3)解压RTAI-1.4源代码到?/,patch核心
解压RTAI源代码文件到任意目录?/下
#cd ?/rtai-1.4
#make patch

51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
(4)配置核心
使用下面的命令来确保系统没有陈旧的“.o”文件及依赖关系:
[root@deep]# cd /usr/src/linux/
[root@deep]# make mrproper
开始配置内核
#cd /usr/src/linux
#make config或
#make menuconfig或
#make xconfig
由于新下载的源代码已经配置了最基本的内容,我们只需添加我们需要的,以下内容必须编译进核心:
1)RTAI需要编译的内容
Processor type and features ->
...
  • MTRR support
    ...
  • Real-Time Hardware Abstraction Layer (NEW)
    Loadable module support ->
  • Enable loadable module support
    [ ] Set version information on all symbols for modules // FORBIDDEN
    ...
    )
    2)frambuffer需要编译的内容
    Code maturity level opetions
      
  • Prompt for development and/or incomplete codes/drivers
       Console drivers
      
  • Video mode selection support
       ...
      
  • Support for frame buffer devices
       ...
      
  • VESA VGA graphics console
       ...
      
  • Advance low level driver options
    3)使用模块需要编译的内容
    Loadable module support
  • Enable loadable module support
    [ ] Set version information on all symbols for modules
  • Kernel daemon support (e.g.autoload of modules)
    4)其他内容
    检查核心是否支持Ramdisk,ps/2鼠标,kernel hacking,tcp/ip,ext2等
    (5)编译压缩内核
    现在返回到“/usr/src/linux/”目录下,下面开始进行内核编译工作,按照下面的命令进行:

    [root@deep]# make dep; make clean; make bzImage

    这行包含三个命令,第一个命令“make dep”实际上读取上一步配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令“make clean”完成删除前面步骤留下的文件,以避免出现一些错误;第三步“make bzImage”实现完全编译内核。

    处理结束以后,生成的被压缩的新内核就可以被安装了。如果你在回答Enable loadable module support (CONFIG_MODULES)选“Yes”,在安装新内核以前,就还需要编译一些模块并且正确的安装。通过下面的命令来实现对模块的编译和安装:

    [root@deep]# make modules;make modules_install
  • 51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
    返回列表