bootloader支持启动多个Linux

内核安装(X86平台)

1、 cparch/x86/boot/bzImage /boot/vmlinuz-$version

2、 cp $initrd /boot/

3、 修改/etc/grub.conf或者/etc/lilo.conf

$version为所编译的内核版本号

文件linux-2.6.32.2.tar.bz2在目录/home/x86下。

#tar jxvflinux-2.6.32.2.tar.bz2

#cd linux-2.6.32

#makedistclean

#cp/boot/config-2.6.18-53.el5 .config(使用正在使用的RHEL5的内核配置作为参考)

#makemenuconfig(直接退出保存,使用默认的配置即可)

#makebzImage(在X86平台,zImage只能小于512K的内核)

生成后的内核映像bzImage位于arch/x86/boot下。

#makemodules_install

时间有点长,出去溜达下。。。

完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/modules(虚拟机的该目录,不是编译内核的目录!)下。

#cd x86

#mkinitrdinitrd-2.6.32 2.6.32

initramdisk的作用:提供一种让内核可以简单使用的ramdkisk的能力。这些能力包括:格式化一个ramdisk;加载文件系统内容到ramdisk;将

ramdisk作为根文件系统。

完成操作后,在当前目录会生成initrd-2.6..32。

由于Linux系统启动时,会从/boot目录下来寻找内核文件和init ramdisk,所以需将内核和init ramdisk拷贝至/boot目录下。

#cp/home/x86/linux-2.6.32/arch/boot/bzImage/boot/vmlinuz-2.6.32。

vmlinuz-2.6.32可以任意取名

#cp/home/x86/initrd-2.6.32 /boot

为了让grub在启动时能提供一项我们自己制作的Linux内核的选择项,需要改grub的配置文件,在原有内容的基础上,添加以下代码。

#vim/etc/grub.config

title RedHat Enterprise Linux Server (2.6.18-53.el5)

root (hd0,0)

kernel /vmlinuz-2.6.18-53.el5ro root=/dev/VolGroup00/LogVol00 rhgb quiet

initrd /initrd-2.6.18-53.el5.img

以下是添加的

titleMy Linux

root (hd0,0)

kernel /vmlinuz-2.6.32ro root=/dev/VolGroup00/LogVol00 rhgb quiet

initrd /initrd-2.6.32

重启虚拟机

注意:Press any key to enter the menu

选择My Linux

我在想CF卡上抑制系统时候出现问题,请求大虾帮助!
   问题是这样的!
   我要做一个CF卡上的linux系统,要求开机引导后就可以运行应用程序!
   我的应用程序是叫hello,在终端打印hello,world!
   我现在是这样做的!
   
   第一阶段:制作CF卡上的LINUX系统
           环境:redhat linux 9.0   工具:CF卡和CF卡读卡器(对系统来说相当于USB设备,就是/dev/sda)
           制作步骤:
               1. 将CF卡分一个区,并格式化为ext2文件系统,然后mount在/mnt/usb上,
               2. 然后准备根文件系统!我用busybox工具,首先将busybox-1.00下载并静态编译!得到一个_install目录
                  目录里面有/sbin/bin /usr 目录 和一个连接文件 linuxrc。我将这些目录和文件拷贝到CF上,
                  即:cp -a/_install/*  /mnt/usb 
               3. 然后建立其它文件系统录: /dev /etc /etc/rc.d   /lib /proc/tmp /var /mnt /boot /boot/grub
             然后在/dev 下建立console tty tty1 ttyS0 ttyS1 null ram0 hda hda1 hdb hdb1 hdc hdc1 sda sda1
                 在/lib 下 拷入hello程序需要使用的共享库libc-2.3.2.so ld-2.3.2.so libdl-2.3.2.so等
                 在/etc 下建立一些需要的脚本文件,rc.sysinit, inittab, fstab
                其中:inittab内容如下:
                      id:2:initdefaults:
                       si::sysinit:/etc/rc.d/rc.sysinit
                      ::askfirst:/bin/bash

                      rc.sysinit内容如下:
                      #!/bin/bash
                          umount -a 
                          mount -a 
                       fstab内容如下:
                      /dev/sda1  /   ext2   defaults1 1  
                      none /proc proc defaults 0 0
                 4. 建立initrd.img  我直接将redhat 9.0 /boot下的initrd-2.4.20-8.img拷过!
                 5.将redhat /boot下的vmlinuz-2.4.20-8内核拷到 /boot 下
                 6. 这样文件系统全部完成了!
  第二阶段: 引导系统  
          工具: grub  作为bootloader  
           步骤:  首先将/boot/grub 目录下的 stage1stage2 拷贝到 CF卡上/boot/grub目录下面
               然后运行grub程序!

                grub>; root (hd1,0)
                grub>; setup (hd1)
                grub>; quit
              成功装如grub ,然后在/boot/grub目录下建立grub.conf脚本文件
                default=0
                timeout=10
                titleCFlinux
                  root (hd0,0)
                  kernel /boot/vmlinuz-2.4.20-8 ro /dev/sda1 
                  initrd /boot/initrd-2.4.20-8.img
  然后开机,设定从USB启动, grub可以正确引导,不过系统报错: init can't  find !我的busybox是静态编译的!

linux内核移植X86平台的例子的更多相关文章

  1. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  2. linux 内核移植和根文件系统的制作

    1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号 ...

  3. 【转】 linux内核移植和驱动添加(三)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...

  4. Linux.中断处理.入口x86平台entry_32.S

    Linux.中断处理.入口x86平台entry_32.S Linux.中断处理.入口x86平台entry_32.S 在保护模式下处理器是通过中断号和IDTR找到中断处理程序的入口地址的.IDTR存的是 ...

  5. 基于tiny4412的Linux内核移植 --- aliases节点解析

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. 【转】 linux内核移植和网卡驱动(二)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708911.html 一,内核移植步骤: 1, 修改顶层目录下的Makefile ARCH       ...

  9. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

随机推荐

  1. BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]

    http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...

  2. Lua利用cjson读写json

    前言 本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode.我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高 ...

  3. Redis 学习(一) —— 安装、通用key操作命令

    一.Redis介绍 1.介绍 通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂.根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上.是否可以 ...

  4. nginx的location优先级

    在nginx配置文件中,location主要有这几种形式: 1. 正则匹配 location ~ /abc { } 2. 不区分大小写的正则匹配 location ~* /abc { } 3. 匹配路 ...

  5. 12小时格式Xcode的-在一个“TimePicker”24 NSDate的设置

    我正在使用的NSDate对象,和好了,我的iPhone与24小时格式,所以当我在测试我的应用程序,一切正常,但是,我的一个朋友试图在他的iPhone上的应用程序 CodeGo.net,但12小时格式, ...

  6. zabbix客户端一键安装脚本(主动模式监控)

    #!/bin/bash basepath=$(cd `dirname $0`; pwd)SHELL_DIR="${basepath}/shell"PACKAGE_DIR=" ...

  7. 阿里云maven仓库配置

    1.在maven的setting.xml配置文件中<mirrors>标签下添加以下配置 <mirror> <id>nexus-aliyun</id> & ...

  8. Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)

    一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...

  9. HTML5-svg圆形饼状图进度条实现原理

    <svg width="440" height="440" viewbox="0 0 440 440"> <circle ...

  10. ubuntu16.04 python3 安装selenium及环境配置

    环境 ubuntu16.04 python3 安装selenium sudo pip3 install seleium 默认安装完是支持firefox,但是更新得太慢对于较新的firefox已经不支持 ...