分享

[转]基于Linux内核定制X86平台的微操作系统

 raymoon_sure 2014-05-29

http://blog.sina.com.cn/s/blog_64fc6b14010133cl.html

摘  要: 1

前言 2

0.1 Linux系统简介 2

0.2 Linux的基本思想 2

0.3 Linux内核 2

0.4 Linux内核版本命名 3

0.5 Linux文件系统 3

0.6Linux内核引导 4

0.7Linux系统组成 4

平台的搭建 4

1.1 硬件平台 4

1.2 软件平台 4

   1.2.1 Ubuntu系统的下载 4

   1.2.2 Ubuntu系统的安装 4

   1.2.3 Ubuntu系统的配置 4

Linux内核的编译 5

2.1 内核的下载 5

2.2 内核的定制 5

2.内核的编译 5

2.4 内核的制作 6

BusyBox的编译 6

3.1 BusyBox的下载 6

3.BusyBox的配置 6

3.3 BusyBox的编译 7

4 Linux文件系统的制作 7

4.1 文件系统的制作 7

4.2 文件系统的配置 9

4.3 文件系统的压缩 7

5 Linux引导程序配置 10

5.1 ISOLINUX的下载 10

5.2 ISOLINUX的配置 10

6 LinuxCD-ROM的制作 10

7 Linux定制系统的运行 11

7.1 VirtualBox下的运行 11

7.U盘引导在X86平台下的运行 12

8定制系统过程中的问题 12

8.1 平台搭建中的问题 12

8.内核编译中的问题 12

8.3 BusyBox编译中的问题 12

8.文件系统制作中的问题 12

8.5 引导程序制作中的问题 12

8.CD-ROM制作中的问题 13

8.7 定制系统运行的问题 13

参考 13

 

基于Linux内核定制X86平台的微操作系统

王林强

(河南大学物理与电子学院通信专业,河南 开封,475004

摘  要: 

Linux是一种自由和开放C语言和汇编语言写成,并符合POSIX标准的类Unix操作系统。并且由于其可定制、可裁剪的特性,不仅在桌面操作系统中有重要的地位,而且在手机、平板电脑、路由器和视频游戏控制台等嵌入式设备有其巨大的优势

为了更好、更深入的了解及掌握Linux系统。本文详细的讲述并实践,如何从Linux内核源码,经过定制、裁剪、编译、制作文件系统、内核引导,iso光盘制作到最终完整的基于Linux内核定制的微操作系统。

通过基于Linux内核定制的微操作系统的制作,深入的理解Linux内核的工作原理、文件系统结构、内核引导等,从而精通嵌入式开发。

关键词: 

Linux定制嵌入式;微系统

 

 

An implementation of micro-operating system 

based on the x86 platform Linux kernel customization

Wang Lin-qiang

(School of Physics and Electronics, Henan University, Henan Kaifeng 475004, China)

Abstract: 

Linux is free and open, and POSIX-compliant Unix-like operating system written in and assembly language. And can be cut because of its customizable features, not only in the desktop operating system in an important position, and its huge advantage in the embedded devices, mobile phones, tablet PCs, routers, and video game consoles.

In order to better and deeper understanding of and master Linux system. This article tells in detail and practice, from the Linux kernel source code has been customized, cutting, compiling, production file system, kernel boot iso CD-ROM production to the final complete custom micro-operating system based on Linux kernel.

In-depth understanding of the Linux kernel works through the production of custom micro-operating system based on Linux kernel, file system structure, core guidance, so proficient in embedded development.

Key words: 

Linux; customizableembedded development; micro-operating system

 

 

前言

 Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。由于其免费、开源、可定制、可裁剪等特性使其在嵌入式领域获得巨大的发展,并占据大部分市场,深入的了解、掌握Linux的裁剪、定制、移植,对嵌入式更好的开发起着至关重要的作用,基于火热的嵌入式开发,未来市场中将需要更多精于Linux移植开发的工程师。

0.1 Linux系统简介

 Linux操作系统是一种自由和开放源码的类UNIX操作系统的一种克隆系统。它诞生于1991 年的10 日(是第一次正式向外公布的时间)。 以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长,目前存在着许多不同的Linux,但它们都使用了Linux内核。  

Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。  

  目前,Linux的发行版有很多,如UbuntuRedHatDebianFedora等等。 

0.2 Linux的基本思想

Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近

0.3 Linux内核

Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言和汇编语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客林纳斯.托瓦兹(Linus B. Torvalds)为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。

该计划开始于1991在计划的早期有一些Minix黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。  

技术上说Linux是一个内核。内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux

0.4 Linux内核版本命名

版本的格式为A.B.C,其中A,B,C代表:  

A大幅度转变的内核。这是很少发生变化,只有当发生重大变化的代码和核心发生才会发生。在历史上曾改变两次的内核:1994年的1.01996年的2.0。  

B是指一些重大修改的内核。内核使用了传统的奇数次要版本号码的软件号码系统(用偶数的次要版本号码来表示稳定版本)。  

C是指轻微修订的内核。这个数字当有安全补丁,bug修复,新的功能或驱动程序,内核便会有变化。  

2.6.0(200312月)发布后,人们认识到,更短的发布周期将是有益的。自那时起,版本的格式为A.B.C.D,其中A,B,C,D代表:  

AB是无关紧要的,C是内核的版本,D是安全补丁 

0.5 Linux文件系统

Linux继承了Unix操作系统结构清晰的特点。在linux下的文件结构非常有条理。

    / 根目录  

|————————/bin        存放二进制文件 

|————————/boot         存放Linux的内核及引导系统程序 

|————————/cdrom       挂载光驱文件系统。 

|————————/dev        存放使用的外部设备。 

|————————/etc        存放各种配置文件和子目录。 

|————————/home        存放用户的主目录。 

|————————/lib         存放系统动态连接共享库。 

|————————/lost+found    存放意外崩溃意外信息 

|————————/mnt          存放挂载储存设备的挂载目录

|————————/media        挂载usb接口的移动硬盘 

|————————/opt          存放可选的程序。 

|————————/proc         存放系统信息 

|————————/root        超级权限用户root的家目录。 

|————————/sbin         存放系统管理员的系统管理程序。 

|————————/srv         服务启动后,所需访问的数据目录 

|————————/sys          一种虚拟的基于内存的文件系统 

|————————/tmp         临时文件目录 

|————————/usr          存放用户应用程序和文件

|————————/var          存放系统日志 

0.6Linux内核引导

 LILOLInux LOader)LILO代表Linux加载程序。LILO是一个在系统启动时运行的程序,它允许选择用于引导计算机的操作系统。  

GNU GRUB(简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。 

0.7Linux系统组成

    引导程序+Linux内核+文件系统=Linux操作系统

平台的搭建

     Linux定制平台的正确选择、配置、安装、调试将为下面的系统制作提供有力的保证。并减少制作过程中问题发生的几率。

1.1 硬件平台

 处理器:Intel? AtomCPU N450 1.66GHz × 

    内  存:992.8M

    硬  盘:WDC WD1600BEVS--00RST0

1.2 软件平台

    本次平台采用采用XP+Ubuntu 12.04双系统。

    系  1Microsoft Windows XP Professional 2002 Service Pack 3

    系  2Ubuntu 12.04

1.2.1 Ubuntu系统的下载

    请注意选择与自己硬件匹配的版本。

    本次平台的Ubuntu下载地址:

    http://releases./12.04/ubuntu-12.04-desktop-i386.iso

1.2 .2Ubuntu系统的安装

    Ubuntu 12.04使用U盘安装双系统,并合理分区。

    正确安装之后的系统信息:

 版本 12.04precise32

内核Linux3.5.0-rc1

GNOME 2.4.1

内存:992.8M

处理器:Intel? AtomCPU N450 1.66GHz × 

可用的磁盘空间:6.7GB

1.2.3Ubuntu系统的配置

装完双系统后,启动进入Ubuntu12.04,打开终端获得root权限:

sudo su

然后安装编译内核时需要的工具:

    apt-get install build-essential kernel-package libncurses5-dev libqt3-headers

    build-essential  (基本的编程库(gcc, make等)

kernel-package  系统里生成 kernel-image 的一些配置文件和工具)

libncurses5-dev  (meke menuconfig要调用的)

libqt3-headers   (make xconfig要调用的)

注:工具在升级过程中可以按提示安装

Linux内核的编译

Linux内核的编译是系统定制与裁剪的关键。要充分考虑系统所满足的硬件要求及限制,编译出最佳内核,充分发挥硬件和Linux内核的特性。

2.1 内核的下载

本次定制使用当前最新的Linux 3.5.0内核,可根据实际情况合适选择内核版本。

Linux 3.5.0 内核的下载地址:

http://www./pub/linux/kernel/v3.0/testing/linux-3.5-rc1.tar.bz2

2.2 内核的定制

1:首先在终端下获得root权限

   sudo su

2:把下载的内核源文件拷贝到/usr/src目录下

   cp /home/linux-3.5-rc1.tar.bz2 /usr/src

3:进入/usr/src目录

   cd /usr/src

4:解压linux-3.5-rc1.tar.bz2 在当前的目录下

   tar -jxvf linux-3.5-rc1.tar.bz2 

5:解压后得到 linux-3.5-rc1文件夹,文件夹内为内核的源代码,进入该文件夹

   cd /usr/src/linux-3.5-rc1

6:使用make命令进行内核定制

   make xconfig

   运行完后,会出现一个配置的窗口,然后按自己的定制要求对选项进行配置,此次定制的是微内核,故可不支持声卡、NFC等,主要配置CPUIntel? AtomCPU

   配置完成后,选择file->saveas,默认保存为.config,选择save

2.内核的编译

    1进入linux-3.5-rc1文件夹,使用make命令开始编译bzImage内核文件(注意'I'为大写)

   cd /usr/src/linux-3.5-rc1

   make bzImage

   根据电脑的配置情况,编译需要一段时间,编译成功后可在/usr/src/linux-3.5-rc1/arch/x86/boot找到生成的内核文件bzImage

2.4 内核的制作

   1:对内核进行压制

  cp /usr/src/linux-3.5-rc1/arch/x86/boot/bzImage /root/vmlinuz

  后面制作CD-ROM时要用到vmlinuz,即定制成功的内核文件。

BusyBox的编译

BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、 cat 和 echo等等,还包含了一些更大、更复杂的工具,例如 grepfindmount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。

3.1 BusyBox的下载

   这里选择1.20.0版本

   BusyBox的下载地址为:

   http://www./downloads/busybox-1.20.0.tar.bz2

3.2 BusyBox的配置

   BusyBox的配置程序和linux内核菜单配置方式近似。

1:在终端下进入root权限

   sudo su

2:将下载的BusyBox源文件拷贝到/usr/src/busybox文件夹下

   mkdir  /usr/src/busybox

3:解压busybox-1.20.0.tar.bz2

   cd  /usr/src/busybox

   tar -jxvf  busybox-1.20.0.tar.bz2

    4:进入新生成的busybox-1.20.0文件夹,进行BusyBox的配置

   cd  /usr/src/busybox/busybox-1.20.0

   make menuconfig 

   弹出一配置对话框,并配置需要编译进busybox的功能选项。

   下面为必选项:     

   Show verbose applet usage messages   

   Runtime SUID/SGID configuration via /etc/busybox.conf     

   Build BusyBox as static binary (no shared libs)     

   Don't use /usr    

   配置好后,退出并保存。 

3.3 BusyBox的编译

   1:开始编译BusyBox

  make 

  make install 

  编译好后在busybox-1.20.0目录下生成子目录_install里面的文件.   

  /busybox         

  |————————bin

  |————————linuxrc -> bin/busybox

  |————————sbin   

  其中可执行文件busyboxbin目录下,制作文件系统将用到_install下的文件。

  (注:由于GCCBusyBox不能很好的兼容,会出现很多问题,请参看后面的BusyBox编译中的问题。)

4 Linux文件系统的制作

正如前面介绍的Linux文件系统一样,无论多小的Linux系统也许具有一个文件系统。

4.1 文件系统的制作

1:在/usr建一个目录tmp 用来装文件系统并建立文件目录

   sudo su 

   mkdir /usr/tmp

   cd /usr/tmp

   mkdir etc usr var tmp proc home root dev 

   etcprocdev是一定要建的binsbin拷贝_install生成的

2拷贝busybox-1.20.0下的_install文件夹到rootfs

   cp -R /usr/src/busybox/busybox-1.20.0/_install/*  /usr/tmp

3dev文件夹下建立设备文件名:

   cd /usr/tmp/dev

   c-R /dev/console ./

   cp -R /dev/null ./

   cp -R /dev/zero ./

4建立etc目录下的配置文件

   需要建立的文件:

   busybox.conf group inittab motd passwd resolv.conf shadow- fstab init.d issue mtab profile shadow

   1其中init.d是从busybox-1.20.0源代码目录下拷贝过来

      cp -R /busybox-1.20.0/examples/etc/init.d /usr/tmp/etc/

        init.d拷过来后要更改其中的文件rcs

        chmod u+x /usr/tmp/etc/init.d/rcs

        用记事本打开rcs,并写入下面的内容:

        #! /bin/sh

        mount -o remount,rw /

        /bin/mount -a

        >/etc/mtab

        echo

 echo

 echo

 echo

 echo -en "\t\tWelcom to Dead_Angel Linux\n"

 hostname Dead_Angel

        保存并退出。

     2busybox.conf是一个空文件.

     3fstab的内容如下:

        /dev/fd0 ext2 defaults 0

        none /proc proc defaults 0

        /dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0

        /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0

     4group的内容如下:

root:0:root

     5inittab的内容如下:

        ::sysinit:/etc/init.d/rcs

        ::askfirst:/bin/sh

        tty2::respawn:/bin/getty 38400 tty2

        tty3::respawn:/bin/getty 38400 tty3

        tty4::respawn:/bin/getty 38400 tty4

        Stuff to do when restarting the init process

        ::restart:/bin/init

        Stuff to do before rebooting

        ::ctrlaltdel:/bin/reboot

        ::shutdown:/bin/umount -a -r

        ::shutdown:/bin/swapoff -a

        issue

        Dead_Angel Linux release 0.1

     6motd的内容为空

     7mtab的内容为空

    8passwd的内容如下:

       root::0:0:root:/root:/bin/ash

    9profile的内容如下:

       /etc/profile: system-wide .profile file for the Bourne shells

       echo

       echo

       export PS1="[\u@\h \w]\$"

       echo "Done"

       alias ll='ls -l'

       alias du='du -h'

       alias df='df -h'

       alias rm='rm -i'

       echo

   10resolv.conf的内容如下

       nameserver 192.168.1.12

   11shadow的内容如下:

       root1$$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:::

   12shadow-的内容如下:

       root1$DWU.tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7:::

4.2 文件系统的压缩

Linux初始RAM磁盘initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式Linux 系统中,initrd 就是最终的根文件系统。

制作img映象文件

    1:先返回我们的主目录

   cd

    2:建立一个8M的空间用来放我们的跟文件系统

   dd if=/dev/zero of=initrd.img bs=1k count=8129

3:将它格式化为ext2的文件系统,然后挂载

   mke2fs -F -v -m0 initrd.img

   sudo mkdir /mnt/initrd

   sudo mount -o loop initrd.img /mnt/initrd

4:接着把我们做好的文件系统复制进去:

   sudo cp -av /usr/tmp/* /mnt/initrd

5:复制完后,卸载initrd

   sudo umount /mnt/initrd

6:压缩根文件系统镜像:

   gzip -fv9 initrd.img

    mv initrd.img.gz /usr/initrd.gz

    到此,我们的就完成了根文件系统的制作,/usr/initrd.gz将在制作CD-ROM时用到。

5 Linux引导程序配置

ISOLINUX 是专门用来引导可移动介质的轻量级引导程序,因为这样的介质通常不会固定只针对一种硬件。ISOLINUX其实是一个简单的Linux系统。

5.1 ISOLINUX的下载

ISOLINUX的下载地址:

ftp://ftp./pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz

5.2 ISOLINUX的配置

制作bootloader,因为我们用的是LiveCD,所以我们就选用isolinux作为我们的bootloader

1:下载好后,解压到/usr/isolinux目录下

   mkdir /usr/isolinux

   tar -jxvf syslinux-4.05.tar.gz /usr/isolinux

2:建立一个临时文件夹,并把isolinux.bin拷进去

   mkdir -p /usr/tmp

   cp /usr/isolinux/syslinux-4.05/core/isolinux.bin /usr/tmp

3:创建isolinux的配置文件

   gedit /usr/tmp/isolinux.cfg

   isolinux.cfg的内容是:

   DEFAULT vmlinuz initrd=initrd.gz

   kernel vmlinuz

   append initrd=/initrd.gz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=60000 rw root=/dev/ram

   编辑好后保存退出。

6 LinuxCD-ROM的制作

  整合并制作LiveCD

  1:在root目录下创建以个透明片文件夹

     mkdir /root/tmp

  2:将我们定制的内核vmlinuz拷贝到该目录下

     cp /root/vmlinuz /root/tmp

  3:将我们制作的文件系统initrd.img拷贝到改目录下

     cp /usr/initrd.gz /root/tmp

  4:将我编写的引导文件isolinux.binisolinux.cfg拷贝到改目录下

     cp /usr/tmp/* /root/tmp

  5:生成iso文件

mkisofs -o Dead_Angel_linux_V1.10.iso -b /boot/tmp/isolinux.bin -c /boot/tmp//boot.cat -no-emul-boot -boot-load-size -boot-info-table /home 

最后,在我们的home底下就生成了一个Dead_Angel_linux_V1.10.iso的光盘镜像

至此,一个基于Linux内核定制的x86平台微操作系统就制作好了。

7 Linux定制系统的运行

    UNetbootin可以轻松的把Linux操作系统装进U盘 可将U盘插到USB接口。 注意:一定要先插U盘再运行UNetbootin!然后从菜单应用程序——系统工具里运行UNetbootin软件。然后把你下好的iso文件放到U盘里,重启电脑,并设置U盘为第一启动设备,即可启动U盘里的操作系统

7.1 VirtualBox下的运行

  安装虚拟机,并虚拟一个Linux系统,把生成的iso作为CD-ROM,即可正常启动,如下图所示:

   启动界面:

基于Linux内核定制X86平台的微操作系统图片一

   当引导成功以后,我们就进入了自己定制的Linux操作系统,虽然只有6M大小,但已经具备一个操作系统的基本功能,可进入根目录,查看有完整的文件系统,我们可通过定制制作启动盘,维护盘等小型的操作系统。         

   下面就开始我们的操作,使用echo命令,输入几行信息,我们可以使用busybox提供的完整的shell命令。        

   如下图:            

基于Linux内核定制X86平台的微操作系统

                                    图片二

7.U盘引导在X86平台下的运行

    我们需要unetbootin将我们生成的iso文件,写入U盘,并设置电脑从USB启动,即可实现正常的引导,我们就可以体验自己的微系统了。

8定制系统过程中的问题

8.1 平台搭建中的问题

   Q1:当我们下载Ubuntu 12.04  不能正常的从硬盘安装?

   A1:由于Ubuntu 12.04 为最新版,硬盘安装出现问题,需使用U盘安装。

8.内核编译中的问题

   Q1:编译不能进行,为什么?

   A1:必备的工具和库是否安装及是否为最新的。

   Q2:编译总是失败,为什么?

   A2:检查你的内核配置是否正确。

   Q3:怎么看不见配置文件.config

   A3:该文件问隐藏属性,从终端进入目录,输入命令ll即可看见。

8.3 BusyBox编译中的问题 

   Q1:编译失败?

   A1:你的配置是否正确,注意查看提示信息。

   A2:需要的工具和库是否安装及是否为最新

8.文件系统制作中的问题

   Q1:找不到某文件?

   A1:注意目录的切换,路径是否正确。

8.5 引导程序制作中的问题

   Q1:看不明白配置的原理?

   A1:请百度isolinux,查看编写方法。

8.CD-ROM制作中的问题

   Q1:不能正确生成iso文件?

   A1:文件是否齐全。

   A2:文件路径是否正确。

   A3:文件名字是否正确。

   Q2:制作iso的命令是为什么?

   Q3:请百度linuxiso的制作。

8.7 定制系统运行的问题

   Q1:虚拟机不能运行?

   A1:虚拟机是否配置正确。

   Q2U盘不能正常引导?

   A2:写入之前尽量格式化。

 

 

参考:

     1】 http://www./bbs/

     2】 http://www./

     3】 http://www./

     4】 http://www.baidu.com/

     5】 http://www./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多