关闭

linux内核移植X86平台的例子

2024人阅读 评论(0) 收藏 举报
分类:

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是静态编译的!  

 


1
0
查看评论

x86 linux系统内核引导流程梳理

引言:在上节提到双系统关键技术之一关于系统启动问题,即在执行内核代码前做了些什么?是怎样从汇编代码过渡到c代码执行?arm芯片和x86芯片启动有什么不同?ram, sram, rom,prom, flash, nor flash, nand flash, fastboot,xloader, boot...
  • armmfc
  • armmfc
  • 2016-04-24 16:18
  • 658

x86平台Linux内核配置编译和安装

1.       配置编译及安装(1)     下载http://www.kernel.org/pub/linux/kernel/v2.6/首先从上面的地址下载内核源码(2)...
  • yanyiwei2003
  • yanyiwei2003
  • 2011-06-30 19:14
  • 1809

linux之x86裁剪移植---grub 识别文件系统

grub主要作用是找到内核(kernel)与部分核心模块的镜像(initrd,主要是sata硬盘驱动之类的模块),把它们导入内存中运行。kernel与initrd放在文件系统中,因此grub必须有识别相应文件系统的能力。能正常工作的grub应该包括一下文件:stage1、stage2、*stage1...
  • mao0514
  • mao0514
  • 2016-05-23 15:41
  • 3470

x86平台内核配置,编译和安装过程(常用操作)

x86平台内核配置,编译和安装过程(常用操作)1,获取linux内核源码 2,清除临时文件,中间文件和配置文件 指令:make distclean 介绍:删除所有配置项和配置文件3,配置内核 指令:make menuconfig 介绍:基于文本模式的菜单型配置 技巧:make menuco...
  • u013937069
  • u013937069
  • 2016-04-12 12:17
  • 400

X86架构下Linux启动过程分析

1、X86架构下的从开机到Start_kernel启动的总体过程 这个过程简要概述为: 开机——>BIOS——>GRUB/LILO——>Linux Kernel 其运行的流程图和重要函数如下图所示:     2、加载Linux内核(基于X8...
  • yuesichiu
  • yuesichiu
  • 2014-08-07 15:27
  • 4524

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制

手把手带你自制Linux系统之六 编译内核及busybox完成系统定制 重新看了一下前面的几章,发现其实前面的5章一直围绕一个话题讲解 — 如何利用CentOS现有资源组装一个Linux。这种方式十分拙劣,Linux内核是固化的、initrd没有充分精简、命令需要一个一个拷贝,最终...
  • Toormi
  • Toormi
  • 2016-01-08 10:23
  • 5281

TI zigbee Z-stack linux gateway 移植编译注意事项

概述TI zigbee Z-stack linux gateway是适用于AM335x,但是当前手中并没有AM335x,只有一个MT7620N路由器开发板,上面运行Openwrt系统。使用MT7620N+CC2530做一个网关。MT7620N与CC2530通过串口通讯。 实现网关步骤: 1、CC...
  • oxp7085915
  • oxp7085915
  • 2017-08-18 14:37
  • 1184

zstack linux gateway 移植

TI 官方最近公开了zstack linux gateway 的全部代码,做智能家居网关的不错方案。 官方的是ARM的,要移植到mips上来。 参考博客:http://blog.csdn.net/code_style/article/details/54375494  这篇博客讲的很详细了...
  • u010217338
  • u010217338
  • 2017-04-12 14:29
  • 561

基于x86的linux编译流程及内核启动流程

  • 2014-12-17 23:54
  • 236KB
  • 下载

x86架构Linux系统C语言程序执行流分析

原创作品转载请注明出处  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 寻址方式: (AT&T) movl %eax,%edx         ...
  • xu19910919
  • xu19910919
  • 2016-02-28 15:26
  • 342
    个人资料
    • 访问:1744469次
    • 积分:24849
    • 等级:
    • 排名:第308名
    • 原创:784篇
    • 转载:44篇
    • 译文:4篇
    • 评论:114条
    统计