当前位置:文档之家› Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减

Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减

Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减
Linux内核裁减及根文件系统定制(之一)--------Linux内核裁减

Linux 系统裁减指南

第一步:裁减内核

打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了

1.1 ―code maturity level options‖选项,代表代码的成熟等级,因为这是一个试验的部分,我们不需要,所以关闭它。

1.2 ―Loadable module support‖可加载模块支持

可加载模块是指内核代码(kernel code)的一些片断,比如驱动程序,当编译内核的时候它们也被单独编译。因此,这些代码不是内核的一部分,但是当需要它的时候,它可以被加载并使用。内核代码编译成可加载模块,可以使内核更小,而且更稳定。所以里面的三项我们全选。

1.3 Processor type and features:处理器类型和特色

在这里,你可以选择你的处理器(Processor)的类型,决定是否选择不同的选项。通常―/dev/cpu‖选项更高级,多数用户并不需要选择它。―High Memory Support‖只有当你的计算机有超过1GB内存(不是磁盘空间)时才是必须的。多数计算机的内存从64到512MB(并且拥有8到60GB硬盘空间),因此―High Memory Support‖通常并不使用。实际上现在所有的处理器都集成了浮点运算单元(译者注:从586级开始所有CPU集成了浮点运算单元),所以通常你可以不选择这个选项。―MTRR‖选项允许在PCI或者AGP总线众进行更快速的通讯。由于现在所有系统都将它们的显卡接在PCI或AGP总线上,你通常需要选择―MTRR‖:无论如何,打开这个选项通常都是安全的——即使你的机器没有使用PCI或AGP总线的显卡。对称多处理器(SMP)需要能够支持超过一个处理器的主板,比如一块支持双Pentium II处理器的主板。―Symmetric multi-processing‖选项保证内核能够以最佳方式加载双处理器。最后一个选项(―APIC‖选项)通常也需要多处理器,但它通常是关闭的。所以在这一栏我只选了MTRR,其他都不选。

1.4 General setup:常规内核选项。

Networking support,linux网络支持,必须选上,否则无法编译内核。

Pci support 因为现在所有系统都使用PCI总线,所以选上。

PCI access mode PCI存取模式,选择any.

System V IPC 程序通信和同步,选上

BSD process accounting 保持进程结束时产生的错误代码,选上

Sysctl support 允许程序修改某些内核选项而不需要重新编译内核或者重新启动计算机,选上

Kernel support for a.out binaries a.out的执行文件是比较古老的可执行代码,但有些程序还要用上,所以选上

Kernel support for ELF binaries ,现在的可执行程序格式,选上

Power management support 电源管理支持,选上

1.5 Memory Technology Devices (MTD),配置存储设备(Memory Technology Devices),这个选项使Linux可以读取闪存卡(Flash Card)之类的存储器,关闭

1.6 Parallel port support,配置并口(parallel port).在USB技术出现以前,并口是最常用的连接计算机和打印机、扫描仪的方式,关闭

1.7 Plug and Play configuration配置即插即用(PnP)设备.因为我不需要USB

设备,所以我关闭这个选项

1.8 Block devices 配置块设备(block devices)

Normal floppy disk support我要使用软驱,所以选上

1.9 Multi-device support (RAID and LVM) 配置多驱动器(multiple devices)不需要RAID(廉价冗余磁盘阵列)或者LVM支持,所以全部关闭

1.10 Networking options 网络配置选项

Packet Socket选项用来与网卡进行通信而不需要在内核中实现网络协议,选上

Unix domain sockets 进行网络链接,选上

TCP/IP networking此选项包括了Internet和内部网络所需要的协议。选上

1.11 Telephony Support 电话支持,不需要,关闭

1.12 ATA/IDE/MFM/RLL support 配置对ATA,IDE,MFM和RLL的支持(硬盘的通讯协议)

现在都用ATA,IDE格式硬盘,所以选上

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support,基本上所有的计算机都使用IDE/ATAPI界面,因此选上

Include IDE/ATAPI CDROM support 支持光驱的时候需要,关闭

Include IDE/ATAPI TAPE support 关闭

Include IDE/ATAPI FLOPPY support 关闭

CMD640 chipset bugfix/support 关闭

1.13 SCSI support 配置SCSI支持.没有SCSI硬盘,也不用USB设备,所以关闭

1.14 Fusion MPT device support 为灰色,系统自动选关闭

1.15 I2O device support 配置I2O设备支持(I2O Device Support)

没有I2O界面,所以选择关闭。

1.16 Network device support 配置网卡支持(Network Device Support)Network device support 在没有网卡支持的情况下,很难将内核编译成功,选上Dummy net driver support(虚拟网卡驱动),系统会经常用到虚拟网卡,选为一个可加载模块。

Ethernet(10 or 100Mbit)配置以太网卡(Ethernet Device)根据自己的实际情况配置,比如我有一块3c509/3c529芯片的3com卡,则选3com cards并将3c509/3c529选为可加载模块

1.17 Amateur Radio support 配置业余广播支持(Amateur Radio Support)不需要,关闭

1.18 IrDA (infrared) support配置红外线(无线)通讯支持不需要,关闭

1.19 ISDN subsystem 配置ISDN.不需要,关闭

1.20 Old CD-ROM drivers (not SCSI, not IDE) 配置老CDROM.没有老CDROM,关闭

1.21 Input core support 配置Input Core Support. 这个选项提供了

2.4.x内核中最重要的特性之一的USB支持。Input core support是处于内核与一些USB设备之间的层(Layer)。我不需要USB支持,所以,关闭

1.22 Character devices配置字符型设备(Character Devices)

virtual terminal允许在XWindow中打开xterm和使用字符界面登录,选上

support for console on virtual terminal告诉内核将诸如模块错误、内核错误启动信息之类的警告信息发送到什么地方,在XWindow下,通常设置一个专门的窗口来接收内核信息,但是在字符界面下,这些信息通常被发送到第一个虚拟终端(Virtual Terminal),

所以,选上

standard/generic (8250/16550 and compatible UARTs) serial support,内核支持串行口,选上

mouse support (not serial and bus mice)用的是PS/2鼠标,所以。选上

PS/2 mouse (aka "auxiliary device" support) 用的是PS/2鼠标,所以。选上

unix98 PTY support 使用远程使用自己机器上的xterm,不需要,关闭

(除此以外的本栏选项,其他的选项全部选择关闭)

1.23 Multimedia devices 配置多媒体设备―Multimedia Devices‖不需要,关闭

1.24 Crypto Hardware suppor,关闭

1.25 File systems配置文件系统(File System)

DOS FAT support windowsNT/2000文件系统,不选择,关闭

ISO 9660 CDROM file system support 光驱支持,不需要,关闭

/proc file system support /proc目录中的文件包含了关于系统状态的许多重要信息,比如那些中断正在使用所以选择,打开

Second extended fs support此选项针对Linux的标准文件系统(Ext2 FS)必须打开这个选项,所以,打开

UDF file system support不需要,关闭

Network file systems假如计算机处于一个需要使用Network file systems选项的大型网络之中,否则不需要,所以,关闭

Partition Types此选项是一个很高级但对于有效的使用Linux内核来说并不必要的选项,关闭

native language support在这个菜单中,可以选择那些编码将被Linux用来处理DOS 和Windows下的文件名,因为刚才选择了不支持DOS 和WINDOWS,所以,关闭

1.26 Console drivers 配置控制台驱动,

VGA text console选项在VGA模式下启动字符模式,打开

video mode selection support此选项使启动的时候能够使用字符模式的分辨率,不需要,关闭

1.27 sound 声卡配置

根据自己的声卡选择相关的驱动,比如我的是nforce系列的声卡,所以我就选择了这一个系列的。

1.28 USB support配置USB支持

因为我将USB驱动关闭了,所以我比需要配置USB支持,所以,关闭

1.29 Kernel hacking 配置―kernel hacking‖选项系统默认

1.30 Save and Exit 保存并退出

(注:没有提到的选项,安系统默认选项)

1.31 在终端输入命令make dep (读取配置过程生成的配置文件,创建对应于配置的依赖关系树)

1.32 make clean (完成删除前面步骤留下的文件,以避免出现一些错误)

1.33 make bzImage (完全编译压缩内核)

到此,裁减内核就完成了,这个内核大小是740k

第二步:根文件系统的制作

boot/root盘由两部分组成,即核心和根文件系统。要把这两部分都放到一个1.44MB的软盘上去,通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,

将一些不必要的支持去掉,这一步我们已经完成了,下面我们是做一个根文件系统的压缩包。对于根文件系统的压缩包括两方面的问题,第一是只保留必要的根文件系统组件,第二是将根文件系统做成一个压缩包,类似于内核工作的原理。

根文件系统概述

一个根文件系统必须包括支持完整Linux系统的全部东西,它至少应包括以下几项:

?基本文件系统结构

?至少含有以下目录:/dev、/proc、/bin、/etc、/lib、/usr、/tmp

?最基本的应用程序,如sh、ls、cp、mv等

?最低限度的配置文件,如rc、inittab、fstab等

?设备:/dev/hd*、/dev/tty*、/dev/fd0

?基本程序运行所需的库函数

以上所需文件一般情况下会超过1.44M,因此我们是先准备好内容后再压缩到软盘中,当用软盘启动时,再把文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK 控制系统启动。

为了能创建以上的根文件系统,必须有一个空闲的能够放下大约4MB文件的RAMDISK。系统缺省情况下已替我们建好了一个大小为4096KB的RAMDISK,其设备名一般为/dev/ram0,我们就使用它来保存我们预先准备好的根文件系统。

创建根文件系统

(1)在终端输入命令:mke2fs -m 0 -i 2000 /dev/ram0,这样就创建了一个虚拟盘mke2fs将会自动判断设备容量的大小并相应地配置自身,-m 0 参数防止它给root保留空间,这样会腾出更多的有用空间。

(2)接着把虚拟盘挂在节点/mnt上:

在终端输入命令:mount -t ext2 /dev/ram0 /mnt/floppy

(3)接着是创建目录。根文件系统最少应该有如下8个目录:

/dev —设备

/proc — proc 文件系统所需目录

/etc —系统配置文件

/sbin —重要的系统程序

/bin —基本应用程序

/lib —共享函数库

/mnt —装载其他磁盘节点

/usr —附加应用程序

执行如下命令创建这些目录:

#cd /mnt/floppy

#mkdir dev proc etc sbin bin lib mnt usr

(4)接下来的工作就是确定各个目录下的内容了:

/dev:/dev中含有系统不可缺少的设备文件。用命令:

cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ra m0,ramdisj,sda,tty1,tty} /mnt/flopp/dev/ 将

console,fd0.hda,hda8,hda9,hda10,initctl,kmem,mem,null,ram,ram0,ramdisj,s da,tty1,tty等必须的设备文件复制到dev文件夹中。

其中参数-dpr是为了保证连接文件仍然不变。

Console为系统控制台设备,非常重要;

Fd0,第一个软驱;

Had,hda8,hda9,hda10 为硬盘设备,其中hda8,hda9,hda10不是必须的;

Initctl 为一个FIFO设备,和init有关;

Initrd 初始化设备;

Kmem 内核虚拟内存;

Mem 访问物理内存;

Null null设备;

Ram ram disk 设备,是/dev/ram0应用initrd机制所必须的;

Tty 当前tty设备;

?/etc:这个目录中含有一些必不可少的系统配置文件。用命令:

cp

/etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue, modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d} /mnt/floppy/etc/ 将文件default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,module s.conf,mtab,nsswitch.conf,pam.d,profile,rc.d复制到当前文件夹etc下面。Default 某个命令的缺省设置;

Ld.so.cache 由idconfig命令根据/etc/id.so.conf文件产生;

ld.so.conf 库文件路径配置文件;

login.defs 全局缺省设置;

fstab 文件系统列表,

fstab应包括:

/dev/ram0 / ext2 defaults

/dev/fd0 / ext2 defaults

/proc /proc proc defaults

init.d符号连接到/etc/rc.d/init.d

inittab init配置文件

inittab包括:

id:2:initdefault:

si::sysinit:/etc/rc

1:2345:respawn:/sbin/getty 9600 tty1

2:23:respawn:/sbin/getty 9600 tty2

modules.conf 模块的配置文件

mtab 已经挂载的文件系统列表

nsswitch.conf name service switch 的配置文件

pam.d放置PAM配置文件的目录

profile 系统环境变量和登陆配置文件

rc.d 放置启动脚本的目录

/bin和/sbin:该目录中包含有必不可少的应用程序,在该目录下放置init, getty,login, mount,以次来运行rc的外壳shell。

/lib: 该目录中包含有你的启动盘启动过程中所需要的共享函数库。

几乎所有的程序都需要libc库,列一下目录/lib中的libc:

libext2fs.so.2,libcom_err.so.2,libuuid.so.1,libc.so.6,ld-linux.so.2 ,libnss_files*,pam_unix.so

(5)打包

完成了上述工作,卸下虚拟盘,拷贝到一个文件中,然后压缩。

umount /mnt

dd if=/dev/ram0 bs=1k | gzip -v9>gj.gz

压缩结束后,就拥有了一个压缩的根文件系统,这个压缩文件的名字叫gi.gz,检查它的大小,如果大了,还得删除一些东西。

第三:组织引导盘

有了根文件系统和内核之后,最后的工作就是把它们组织在一起。

接下来创建一个内核文件系统。把一张干净的软盘插入软驱,在上面创建ext2文件系统。相继在shell中输入命令:??

mke2fs /dev/fd0 (创建文件系统)

mount /dev/fd0 /mnt/floppy(挂载软盘)

rm -rf /mnt/floppy/lost+found(删除系统生成的文件夹)

mkdir /mnt/floppy{boot,dev}(创建两个文件夹)

mkdir /mnt/floppy/boot/grub

再执行:

cp -R /dev/{null,fd0} /mnt/floppy/dev

cp /boot/grub/stage1 /mnt/floppy/boot/grub

cp /boot/grub/stage2 /mnt/floppy/boot/grub

接着拷贝启动加载器boot.b到目录/boot中,

cp /boot/boot.b /mnt/floppy/boot

把grub引导写到软盘上面

#grub

在grub>; 提示符处,输入:

grub>; root (fd0)

grub>; setup (fd0)

grub>; quit

写完引导后

#cp vmlinuz-jou /mnt/floppy/boot (复制内核到boot文件夹下)

#cp gj.gz /mnt/floppy/boot (复制压缩文件系统到boot文件夹下)

#cp /boot/grub/grub.conf /mnt/floppy/boot/grub (把引导配置文件复制到grub下面)

编辑grub.conf, 内容如下:

timeout 10

default 0

title My little Linux

root (fd0)

kernel /boot/vmlinuz-jou ro root=/dev/ram0

initrd /boot/ gj.gz

然后制作grub.conf的link文件menu.lst

#ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst

#umount /mnt/floppy(退出软盘)

裁减linux内核

工作目标:制作一个小的linux系统,使之体积尽可能地少,功能尽可能地简化,以在其上能够运行一个RedHat Linux下编译的可执行程序为限。

工作结果:制成一个U盘上的linux小系统,总共大小为60M左右。能够从U 盘引导,完全脱离硬盘运行,提供全部的linux内核功能,以字符界

面方式提供RedHat Linux常用功能包括帐户、文件管理和网络等常

用服务等功能,并且可以扩展。

工作环境:PC机一台,U盘(至少64M为宜),网络

RedHat Linux 9.0(可以使用vmware虚拟)

工作流程:

第一阶段:配置和编译内核

第二阶段:移植内核到U盘上

第三阶段:裁减文件系统

一、配置和编译内核。

(1)准备linux内核源码,放于目录/usr/src下。这里使用的版本是:linux-2.6.18(2)配置内核:在源码所在的目录下,使用命令make menuconfig对内核进行配置。在图形界面下可以使用make xconfig命令开始这项工作。对内核的配置涉及到很多软硬件的选项,网上资料很多,这里不一一累述。但是这里因为工作目标是要做成U盘启动,所以应该增加对USB设备的支持,而且linux把USB存储器当成SCSI设备处理,所以也应增加SCSI支持。编译的时候,必须的功能应该选择y编译进内核,部分功能可以选择M表示以模块加载的形式提供支持。非必要的尽量不要选,以减小目标内核的体积。

配置内核完成后,在退出的时候选择“保存”配置结果。

(3)编译内核:首先需要用make dep命令生成所配置的内核选项中的依赖关系,不过在2.6.*的版本中这一步骤已经不需要显式地进行。如果此前曾在这个源码目录里面进行过内核编译的工作,可以用make clean清除上次编译的结果,以免造成影响。生成内核映象的命令是make bzImage.这一过程用时较长,具体时间取决于所配置的内核选项和计算机的处理速度。结束的时候,会告知生成的内核映象是./arch/i386/boot/bzImage文件,这就是这一阶段主要的成果了.除此以外,在当前目录下会生成一个System.map的文件,这

是内核中的符号表。

(4)生成模块。一般我们都会把或多或少的内核功能配置为模块支持。所以我们需要用命令make modules生成这些模块。接下来用make modules_install把模

块拷贝到指定的目录,也就是/lib/modules/目录下以所编译的内核版本号为文件夹名为目录名的文件里。这里的目录是/lib/modules/2.6.18.如果编译的目标内核版本号与当前系统的版本号相同,最好先对同一目录的文件进行备份。

(5)生成initrd文件。RedHat Linux使用了一种称之为initrd的工作方式来阶段化系统的初始化过程。使用mkinitrd initrd-2.4.20.img 2.4.20来生成需要的initrd 文件。该命令中中间的参数是生成的文件名,结尾的参数是所用的版本号,也就是/lib/modules/下的那个目录文件名。

(6)测试内核。利用现行系统进行测试,看看我们构造的内核是否可用。把上面生成的bzImage、System.map、initrd-2.4.20.img都拷贝到/boot目录下,并在引导选项上增加相应的选项。如果是用grub作引导器,则只须在/boot/grub/grub.conf 中增加以下几行即可。

title usb Linux (2.4.20)

root (hd0,0)

kernel /bzImage ro root=LABEL=/

initrd /initrd-2.4.20.img

第一行是显示在引导画面上的操作系统名字,第二行是引导盘的标记。第三行指明了内核映象文件和根文件系统所在的设备。最后一行是initrd的文件映象。一般情况下都把bzImage重命名为更有意义的新名字,这里没有进行这一处理,使用原始文件名。

重新启动系统,选择新内核进入系统。如果前面的工作没有错误,则会成功地以新内核启动整个系统(包括文件系统)。可以使用命令uname –r查看内核版本号,以验证当前运行的系统内核是否为我们编译的系统。

二、把内核移植到U盘上。

(1)修改initrd。从U盘引导的时候,需要在initrd里面增加对U盘存储的支持。U盘的初始化比内核执行得慢,所以需要对initrd做如下修改:

mv /boot/initrd-2.4.20.img /tmp/initrd.gz

cd /tmp

gunzip initrd.gz

mkdir /mnt/initrd

mount –o loop initrd /mnt/initrd (

编辑/mnt/initrd/linuxrc文件,加入以下内容

echo \'wait 3 seconds.....\'

/bin/sleep 3

通过睡眠三秒的方式等待U盘完成初始化了再继续执行。但是这个时候还没有sleep这个程序可用,所以需要另外将这个程序引入。这里采用busybox来实现。下载busybox源代码,编译生成静态的可执行文件busybox.拷贝到

/mnt/initrd/bin/下面,并做如下链接:

ln -s /mnt/initrd/bin/busybox /mnt/initrd/bin/sleep

此外,因为计划使用ext2文件系统而不是ext3文件系统来实现文件系统,所以需要把下面这句mount -o defaults --ro -t ext3 /dev/root /sysroot 修改成为mount -o defaults --ro -t ext2 /dev/root /sysroot。

修改完成之后,恢复initrd。

cd /tmp

umount initrd

gzip -9 initrd

(2)格式化U盘。使用工具fdisk格式化U盘,这里假设只将U盘分成一个区,即sda1,并且设置该分区为可引导的。

(3)将该分区做成ext2文件格式,并且添加标签/。所用命令为:

mke2fs –m 0 /dev/sda1

e2label /dev/sda1 /

(4)挂载该分区:mkdir /mnt/usb

mount /dev/sda1 /mnt/usb

(5)拷贝内核及相关文件到U盘。

在/mnt/usb目录下新建一目录boot,把bzImage、System.map和修改过的initrd 文件都拷贝进去。

cp /boot/bzImage /mnt/usb/boot/

cp /boot/System.map /mnt/usb/boot/

cp /tmp/initrd.gz /mnt/usb/boot/initrd.img

新建目录/mnt/usb/lib/modules,把/lib/modules/2.4.20整个文件夹都拷贝进去。(6)安装grub.为了从U盘上引导操作系统,需要在该盘分区上安装grub。

先拷贝必要的文件。在/mnt/usb/boot目录下面,建目录grub,并把系统

/boot/grub下的文件拷贝过去,最少需要五个文件:

grub.conf menu.lst splash.xpm.gz stage1 stage2

其中grub.conf是grub引导时的配置文件,需要进行修改。这里只列出修改部分:

default=0

timeout=3

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title usbLinux (2.4.20)

root (hd0,0)

kernel /boot/bzImage ro root=LABEL=/

initrd /boot/initrd.img

下面正式安装grub.

cd

umount /dev/sda1

grub

>>root (hd1,0)

>>setup (hd1)

>>quit

如果前面的工作都正确,grub的安装会成功完成。

(7)测试。重启计算机,设置为可从USB设备引导,插入已经制作好的USB 盘,系统可以引导到内核完成,然后死机。

三裁减文件系统

一个完整的RedHat Linux由内核部分和根文件系统组成,内核部分只提供操作系统所提供的软硬件管理的功能,根文件系统则来实现用户需要的功能。一个完整的根文件系统最少应包括如下文件夹:

bin dev lib root tmp var

boot etc initrd lost+found proc sbin usr

可以从无到有地手工制作每个需要的文件,也可以从现有系统中直接拷贝再进行修改。前一工作过于繁复,所以这里采用后一种方法。

为了制作一个完整的根文件系统,将环境恢复到原来的宿主系统,并且把U 盘再次挂载到/mnt/usb下。以下依次说明根文件系统根目录下(也即/mnt/usb/)下要创建的文件夹。

(1)bin和sbin:这两个文件夹下都是可执行程序,拷贝现有的可执行文件即可,但是不必都拷贝,否则我们的空间吃不消,而且也没有这个必要。选择哪些取决于系统默认启动哪些服务以及你希望给你的系统提供哪些功能。因为我们打算在目标系统上运行一个在完整的RedHat Linux下的程序,所以使用了比较多的功能。

(2)dev:这个文件夹下是设备文件,可以从系统中拷贝过来,使用参数-dpRa. console hda2 initrd pts ram2 sda sda3 sdb2 tty0 tty3

hda hda3 null ram0 ram3 sda1 sdb sdb3 tty1 urandom hda1 initctl ptmx ram1 raw sda2 sdb1 tty tty2 zero

(3)etc:这个文件夹下是系统的配置文件,包括系统初始化时的配置和很多服务的配置。为了避免出错,可以把系统中的原文件都拷贝过来。有些文件需要修改:fstab:

LABEL=/ / ext2 defaults

1 1

none /dev/pts devpts gid=5,mode=620

0 0

none /proc proc defaults

0 0

如果我们的系统以运行级别3运行(这是绝大多数情况),会运行rc.d/rc3.d/下面的每个脚本文件,其中每个代表一种服务。如果需要关闭某些服务,只须要在这里删除相应的文件即可。不用担心会对系统造成损害,因为这里只是一些链接文件,删除这些链接并不会对系统的完整性造成影响。值得注意的是,这里的每个服务都是用bash脚本实现的,需要用到可执行程序,也就是

/bin,/sbin/,/usr/bin,/usr/sbin下的可执行程序。如果这里选取了某种服务,却没有把它所依赖的可执行程序载入,运行时就会出错。

此外,由于这个文件夹下的passwd、shadow、gshadow、gpasswd等文件管理着系统的帐户和组策略,拷贝后的目标系统会拥有和原系统同样的帐户和密码,以及完全一样的组配置。

(4)lib:这一文件夹下包括支持的模块(第二个阶段中已经完成)和运行程序依赖的动态链接库文件。使用ldd 查看每个可执行程序依赖的库,从原系统中拷入即可。

(5)proc:这个文件夹用于存放系统运行时的内核信息,便于用户查看系统运行时信息,不需要添加任何文件。

(6)root:这个文件夹是超级用户登录时的默认根文件夹。只需要把原系统中的几个隐藏配置文件载入即可。

(7)usr:这里需要的文件也依赖于所选取的服务。

(8)var:这里使用了七个文件夹,有些是空的,但是必须。

empty lib lock log run spool tmp

empty:有文件夹sshd,为空。

lib:r andom-seed

lock: 有文件夹subsys,为空

log :boot.log dmesg lastlog messages secure vbox cron maillog spooler wtmp

spool:cron(空文件夹)

tmp: 空文件夹

嵌入式Linux根文件系统制作

实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的 了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构 掌握根文件系统的搭建过程 掌握busybox、mkcramfs等工具的使用方法 二. 项目主要任务 使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。 分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程 三. 基本概念 1.文件系统基本概念 Linux的一个最重要特点就是它支持许多不同的文件系统。这使Linux非常灵活,能够与许多其他的操作系统共存。Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。随着时间的推移, Linux支持的文件系统数还会增加。Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。该树形层次结构把文件系统表示成一个整个的独立实体。无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。该个目录被称为装配目录或装配点。在文件系统卸载时,装配目录中原有的文件才会显露出来。在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。 2.常见的嵌入式文件系统 嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。 (1)Flash根据结构不同分为 NOR Flash和NAND Flash。基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

busybox详解制作根文件系统

详解制作根文件系统 单击,返回主页,查看更多内容 一、FHS(Filesystem Hierarchy Standard)标准介绍 当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。 该标准规定了根目录下各个子目录的名称及其存放的内容: 制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括: ?编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 ?利用交叉编译工具链,构建/lib目录 ?手工构建/etc目录 ?手工构建最简化的/dev目录 ?创建其它空目录 ?配置系统自动生成/proc目录 ?利用udev构建完整的/dev目录 ?制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。 二、编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god,这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀——busybox,事情就简单很多。 1、从https://www.doczj.com/doc/c64490885.html,/下载busybox-1.7.0.tar.bz2 2、tar xjvf busybox-1.7.0.tar.bz2解包 3、修改Makefile文件 175 ARCH ?= arm 176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busybox busybox配置主要分两部分。 第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:

嵌入式Linux内核移植详解(顶嵌)

内核移植阶段 内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。 内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。 一.移植准备 1. 目标板 我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: https://www.doczj.com/doc/c64490885.html,/thread-80832-5-1.html。bootloader移植准备。 2. 内核源码 这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是 ftp://https://www.doczj.com/doc/c64490885.html,/pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。 3. 烧写工具 我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持 4. 知识储备 要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进 行简单介绍。 (1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子 目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体 系结构的子目录。PC机一般都基于此目录。 (2)block/:部分块设备驱动程序。 (3)crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验 算法。 (4) documentation/:文档目录,没有内核代码,只是一套有用的文档。 (5) drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目 录:如,/block 下为块设备驱动程序,比如ide(ide.c)。 (6)fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持 一个文件系统, 例如fat和ext2。

实验四 ramdisk 根文件系统的制作

实验四ramdisk根文件系统的制作 一.实验目的 1.熟悉根文件系统组织结构; 2.定制、编译ramdisk根文件系统。 二.实验设备 1.硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机; 2.软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。 三.实验内容 利用6.3 中的已经完成的文件系统,生成一个根文件系统镜像。 四.实验原理 ramdisk是内核初始化的时候用到的一个临时文件系统,是一个最小的linuxrootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,做为启动引导驱动,包含如下目录: bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin 目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。1.制作ramdisk根文件系统映像 1)单击菜单应用程序->附件->终端打开终端,设置环境变量: $ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh $ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh 2)执行命令切换到ramdisk实验目录下: $cd $SIMPLEDIR/6.4-ramdisk 3)运行脚本文件: $ sudosh ramdisk-install.sh shell 脚本命令说明: #!/bin/bash # # ramdisk-install.sh - Make ramdiskfilesystem. # # Copyright (C) 2002-2007

内核配置与裁剪

内核配置与裁剪 1. Linux内核配置 内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig 等等,它们的功能都是一样的。这里用的是make menuconfig。 过去基于2.x的内核为用户提供了四种基本的内核设置编辑器: ?. config 服务于内核设置的一个冗长的命令行界面; ?. oldconfig 一个文本模式的界面,主要包含一个已有设置文件,对用户所发现的内核资 源中的设置变量进行排序; ?. menuconfig 一个基于光标控制库的终端导向编辑器,可提供文本模式的图形用户界 面; ?. xconfig 一个图形内核设置编辑器,需要安装X-Window系统。 前三种编辑器在设置2.6内核时仍可使用,在运行“make xconfig”后,原有的界面被两个新的图形设置编辑器所代替。这需要具体的图形库和X-Window系统的支持。另外,用户还可以通过“make defconfig”命令,利用所有内核设置变量的缺省值自动建立一个内核设置文件。 下面具体介绍Linux内核配置选项: . 代码成熟度选项 Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers [*] Select only drivers expected to compile cleanly 在内核中包含了一些不成熟的代码和功能,如果我们想使用这些功能,想打开相关的配置选项,就必需打开这一选项。 . 通用设置选项 General setup ---> () Local version - append to kernel release [*] Automatically append version information to the version string [*] Support for paging of anonymous memory (swap)

实验八 构建根文件系统

实验八构建根文件系统 一、实验目的 1、了解嵌入式Linux文件系统的作用和类型; 2、了解jffs2文件系统的优点和在嵌入式系统中的应用; 3、理解文件系统的挂载过程; 4、使用BusyBox制作一个根文件系统。 二、实验环境 预装redhat9.0(内核版本2.4.x)的pc机一台,XScale嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链,BusyBox软件包。 三、实验步骤 1、解压BusyBox软件包; 2、使用make menuconfig来配置BusyBox,修改交叉编译器前缀; Build Option [*] Build BusyBox as a static binary(no shared library) [*]Do you want to build BusyBox with a Cross ompile /usr/local/hybus-linux-R1.1/bin/arm-linux- Installation Option [*]Don't’t use /use Coreutils [*]ls

[*]cp [*]reboot [*]echo [*]mkdir [*]rm Editors [*]vi Login Utilities [*]getty 3、交叉编译BusyBox; make make install 4、建立BusyBox顶层目录结构 mkdir etc dev proc tmp lib var sys 5、在dev目录下创建必要的设备节点 (ram0,console,null,zero); mknod mdblock b 31 3 mknod console c 5 1 mknod null c 1 3 mknod zero c 1 5 cp –dpR /dev /_install/dev (假设busybox的安装目录为/_install)

基于busybox的根文件系统制作

龙源期刊网 https://www.doczj.com/doc/c64490885.html, 基于busybox的根文件系统制作 作者:李飞,武金虎,石颖博 来源:《电脑知识与技术》2010年第17期 摘要:Busybox是构建嵌入式Linux文件系统的必备软件,它是所有文件和设备节点的起始点,是决定系统能否正常启动的关键。通过busybox-1.1.3为例,进行配置、编译、安装等过程,从而形成简单的根文件系统映像文件,为以后嵌入式Linux系统的移植打下了良好的开端。 关键词:Busybox;嵌入式Linux;Linux操作系统;根文件系统;cramfs 文件系统 中国分类号:TP316.81文献标识码:A文章编号:1009-3044(2010)17-4655-02 Making Root File System Based on Busybox LI Fei, WU Jin-hu, SHI Ying-bo (College of Computer Science and Information, Guizhou University, Guiyang 550025, China) Abstract: Busybox is an essentiaL software to buiLd an embedded Linux fiLe system. It is the starting node point of aLL the fiLes and devices and the key whether the system can have a normaL start. Taking busybox-1.1.3 for exampLe, making a simpLe root image system fiLe by configuration compiLation and instaLLation Lays a good foundation for migration of the embedded Linux system. Key words: busybox; embedded linux; Linux OS; root file system; cramfs file system 1 根文件系统结构 根文件系统是所有文件和设备节点的起始点,包括系统所必须的各种工具软件、库文件、 脚本、配置文件等一系列的文件。一个基本的Linux根文件系统包含有以下的目录:dev、proc、bin、etc、usr、Lib、temp、var、usr等等目录。其中dev是设备文件节点目录,proc是挂载proc文件系统所用的目录,bin目录下面包含了系统的基本命令,etc目录是系统启动脚本所在的目录,Lib是系统默认的动态链接库目录,usr是用户目录,temp是临时目录,用来保存临时文 件,var目录包含系统运行时要改变的数据。以上都是根文件系统所必须的目录 2 Busybox简介 熟练嵌入式Linux的朋友对busybox一定不会陌生,它是标准Linux工具的一个单个可执行实现,被形象的称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX工具和命令 结合到一个单独的可执行程序中。虽然busybox中的这些工具相对于GNU常用工具功能有所

嵌入式 linux 根文件系统 rootfs

一、什么是文件系统(Filesystem) 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 二、主要嵌入式采用的文件系统 * Linux 中,rootfs是必不可少的。PC 上主要实现有ramdisk和直接挂载HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从HD 启动,而是从Flash 启动,最简单的方法是将rootfs load 到RAM 的RAMDisk,稍复杂的就是直接从Flash 读取的Cramfs,更复杂的是在Flash 上分区,并构建JFFS2 等文件系统。 * RAMDisk将制作好的rootfs压缩后写入Flash,启动的时候由Bootloader load 到RAM,解压缩,然后挂载到/。这种方法操作简单,但是在RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源RAM。 ramdisk就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd是RAMDisk的格式,kernel 2.4 之前都是image-initrd,Kernel 2.5 引入了cpio-initrd,大大简化了Linux 的启动过程,附合Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd作为新的格式,还没有经过广泛测试,嵌入式Linux 中主要采用的还是image-initrd。 * Cramfs是Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从Flash 上运行,不须load 到RAM 中,因此节约了RAM。但是Cramfs是只读的,对于需要运行时修改的目录(如:/etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs等可写的fs。 * SquashFS是对Cramfs的增强。突破了Cramfs的一些限制,在Flash 和RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试 三、建一个包含所有文件的目录 1。建一个目录rootfs用来装文件系统 2。mkdir bin devetc lib procsbintmpusrvar 3. ln -fs bin/busyboxlinuxrc(使用busybox)

Linux内核裁剪实例

Linux内核裁剪实例 从零开始配置内核是不明智的,建议在某一个默认配置的基础上进行修改,以达到自己产品的实际需求。 裁剪和配置内核的基本原则: ?基于某一个最接近的主板配置来修改; ?必须的、能确定的选项选中; ?不能确定的则不要改变原来配置; ?可选可不选的,建议根据help信息决定或者不选; ?一次改动不要太多,渐进式修改和验证; ?注意及时备份配置文件,出现意外可以回退恢复。 下面给出一些常见功能的配置裁剪实例,很多功能与所采用的主板硬件相关,与其它不同主板的内核配置上不一定完全相同,但还是有一些参考意义。 1.1.1 GPIO子系统配置 Linux 2.6以上内核引入了子系统,GPIO子系统将全部GPIO的操作接口都通过 “/sys/class/gpio/”目录导出,非常方便用户使用。 输入下列命令,进入内核配置菜单: $ make ARCH=arm menuconfig 在主菜单界面中选择“Device Drivers”: [*] Networking support ---> Device Drivers ---> File systems ---> Kernel hacking ---> 进入“Device Drivers”界面,选择并进入“GPIO Support”: [*] SPI support ---> PPS support ---> PTP clock support -*- GPIO Support ---> <*> PWM Support ---> 在“GPIO Support”中选中“/sys/cla ss/gpio…”: --- GPIO Support [*] /sys/class/gpio/... (sysfs interface) *** Memory mapped GPIO drivers: *** … 配置后重新编译内核,使用新内核的系统即可通过“/sys/class/gpio/”访问系统的GPIO 了。

在硬盘上制作根文件系统.doc

在硬盘上制作根文件系统 一、实验目标: 在硬盘上建立一个根文件系统,硬盘镜像文件的名称为:hdc-0.11.new.img 二、实验环境: 1、Vmware workation, bochs虚拟机,ultraedit编辑环境 2、用到的四个重要的镜像文件:bootimage-0.11-hd,hdc-0.1.img,并将他们放到 mylinux0.11文件夹中。 3、实验环境:redhat linux 三、实验理论依据: 1、Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括以下一些子目录和文件: etc/ 目录主要含有一些系统配置文件; dev/ 含有设备特殊文件,用于使用文件操作语句操作设备; bin/ 存放系统执行程序。例如sh、mkfs、fdisk等; usr/ 存放库函数、手册和其它一些文件; usr/bin 存放用户常用的普通命令; var/ 用于存放系统运行时可变的数据或者是日志等信息。 存放文件系统的设备就是文件系统设备。Linux 0.11内核所支持的文件系统是MINIX 1.0文件系统。 2、inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬 盘、软盘、U盘... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode 值最快的找到相对应的文件。每一个文件开头都是一个inode。 做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。

根文件系统制作

Linux根文件系统的制作 1. 根文件系统 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统 * Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘)上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是 将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。 * RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。 ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk 有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小 随所需要的空间增加或减少,是目前linux常用的ramdisk技术. * initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。 * Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修 改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。 * SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试。 3.Ramdisk制作 RAMDisk的制作方法如下:

实验5 linux内核的裁剪移植

实验5 linux内核的裁剪移植 一、实验目的: 学习利用menuconfig配置文件进行裁减内核,编译内核并移植到开发板上。 二、实验内容 一、开发环境 宿主机:ubuntu10.04 开发板:tiny6410 编译器:4.3.2 二、内核移植 1.下载源码 ftp://https://www.doczj.com/doc/c64490885.html,/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2 此实验所需的文件放到/home/embedded/11目录下: linux-2.6.38.tar.bz2, yaffs2.tar.bz2 s3c_nand.c , s3c_nand_mlc.fo ,nand_base.c ,Kconfig ,regs-nand.h 2.解压 (进入根目录下的/home/poplar/expr4/kernel目录,解压源码)# cd /home # mkdir poplar/expr4/kernel –p # cd /home/poplar/expr4/kernel # cp /home/embedded/11/linux-2.6.38.tar.bz2 ./ tar xvfj /home/poplar/expr4/kernel/linux-2.6.38.tar.bz2

3.修改架构,编译器(需要在arm上运行,所以用交叉编译器)解压完进入解压出来的linux-2.6.38目录 #cd linux-2.6.38 #vi Makefile (或者用gedit)

191行改为 ARCH ?= arm //191行CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux- (找到其交叉编译环境,把路径加全) //192行

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

定制最简linux和根文件系统(平台龙芯1B开发板)共13页word资料

版本历史 版本时间备注 V1.0 2013-08-28 创建 1. 前言 (2) 1.1. 开发板版本号 (2) 1.2. 工具链版本号 (2) 1.3. 参考文档及其版本号 (3) 1.4. 目标 (3) 2. 搭建开发环境 (3) 3. 制作根文件系统 (3) 3.1. 配置 (3) 3.1.1. 拷贝源码,并解压 (3) 3.1.2. 配置选项简述 (4) 3.2. 编译 (4) 3.3. 构建根文件系统 (5) 3.3.1. 建立系统根目录 (5) 3.3.2. 建立设备文件 (5) 3.3.3. 建立系统配置文件 (5) 4. 编译linux (7) 4.1. 配置 (8) 4.1.1. 首先拷贝源码,并解压 (8) 4.1.2. 不安装Ncurses (8) 4.1.3. 没有拷贝.config (8) 4.1.4. 不用修改Makefile (8) 4.1.5. 配置选项简述 (9) 4.2. 编译 (10) 5. 启动运行linux (11) 5.1. 拷贝vmlinux到tftp服务器目录下 (11) 5.2. 设置PMON的ip地址 (11) 5.3. 下载内核 (12) 5.4. 启动linux (12)

1.前言 很高心拿到了龙芯1B开发板。然后仔细的看了开发板光盘里的《1B开发板用户手册.pdf》。里面写得非常详细,并且都附有截图,很明了。从最开始装虚拟机到编译linux,制作根文件系统等等,连虚拟机软件和Ubuntu系统镜像都有。可以说这套开发板考虑得非常周到。 然后我就参照《1B开发板用户手册.pdf》编译了linux,制作了根文件系统,最后终于跑起来,进入了shell。 这里谈谈我的感想 ●用户手册更像一个工具书 就拿根文件系统来说吧。Cramfs,Jffs2,Yaffs2的制作步骤都有,这表示该手册很全面,但是如果是一个初学者的话,给的选择太多不一定是好事。这也是我想写这篇文档的原因。我想linux的配置尽量简单(除了串口驱动以外,其它的比如,网卡,声卡,触屏等都暂时不需要),根文件系统也尽量简单(手册中的已经很简单了,后面我们就参照手册),另外为了再简单一点我把根文件系统也选择内存文件系统,内核只下载到内存而不烧写到flash,同时PMON参数也不修改。这样做有个好处——任何时候我可以复位进入开发板预装的linux 和文件系统。这便于在我们遇到问题时参考。 ●制作根文件系统的章节还有点小小的问题需要改进 ?手册中的笔误Busybox配置过程中ionice错写为inoice ?没有新建目录/root和/var/log ?没有新建console和串口设备节点ttyS2 另外,说点题外话,回想以前读大学时,非常想学习嵌入式,但是感觉非常困难。现在看来,当时感觉困难的原因是入门太难了。为什么入门难,弄了很久连环境都没打起来,更别说编译linux,制作根文件系统了。 在这里我想说“朋友们,搭建环境只需要把开发板的工具链解压到指定目录就可以了。就相当于windows上的绿色软件一样,仅此而已,这比安装vs2019快多了,方便多了”。 既然开发环境搭建起来了,后面就是配置编译linux,制作根文件系统了(先不要管PMON 了,就像电脑一样,很少有人换bios,最多重装系统)。这也就是本篇文章的任务。 1.1. 开发板版本号 LS1B DEMO BOARD Schematic Revision 2.0即版本为2.0 1.2. 工具链版本号 版本为gcc-3.4.6-2f.tar.gz

Linux内核安装、裁剪图文教程

目录 Practice1 (4) 一编译过程 (4) 1 安装必要的软件 (4) 2 下载linux内核源文件 (4) 3 解压缩源文件 (5) 4 复制config文件 (6) 5 进行menucofig配置 (6) 6 menuconfig配置页面 (7) 7 对驱动设置进行简单配置 (8) 8 选择cpu类型 (8) 9 设置完成保存退出 (9) 10 开始编译内核 (9) 11 内核编译过程 (10) 12 内核编译过程(3小时后) (11) 13 内核编译成功 (12) 14 安装新内核 (12) 15 新内核安装过程 (13) 16 比较两个内核 (14) 17 重新启动系统 (14) 18 登录新内核 (15) 19 新内核登录成功 (15) 20 查看新内核版本号号 (16) 二、编译过程中遇到的问题 (16) 1 错误VFS:Unable to mount root (16) 2错误Driver ‘mdio-gpio’ (18) Practice2 (20) 一、内核选项翻译及选择理由 (20) 1. General setup 常规设置 (20) 二、裁剪过程 (21) 1.进入设置界面 (21) 2. General setup页设置 (22) 3. Enable the block layer页设置 (23) 4. Processor type and features页设置 (24) 5. Power Management and ACPI options页设置 (28) 6. Bus options页设置 (29) 7. Executable file formats页设置 (30) 8. Networking options页设置 (31) 9. Device Drivers 页设置 (34) 10. Firmware Drivers页设置 (37) 11. File systems页设置 (38) 12. Kernel hacking页设置 (40) 13 CryptographicAPI页设置 (41)

Ubuntu for Arm根文件系统制作

1.安装rootstock软件 rootstock是一个用来制作Ubuntu根文件系统的工具,可以使用apt-get install rootstock获取,也可以在官网直接下载:https://https://www.doczj.com/doc/c64490885.html,/project-rootstock 若选择前者:直接使用rootstock命令 若选择后者:解压下载文件rootstock-0.1.99.4.tar.gz得到rootstock可执行文件,可以将其拷贝到系统bin目录下 2.rootstock创建根文件系统 [html]view plaincopy 得到文件系统压缩文件qemu-armel-201408271515.tar.gz 创建一个空镜像: [html]view plaincopy 在镜像上创建文件系统: [html]view plaincopy 挂载镜像: [html]view plaincopy 将文件系统解压到挂载目录: [html]view plaincopy 这时可以修改挂载目录中的东西了: [html]view plaincopy 最后是得到最后的文件系统镜像: [html]view plaincopy

3.模拟器中运行根文件系统 下载模拟器qemu: [html]view plaincopy 在2中的“若干修改”中执行: [cpp]view plaincopy 在仿真环境中访问文件系统 [cpp]view plaincopy 此时在仿真环境下就可以安装SPICE了:[cpp]view plaincopy 安装完SPICE后保存文件系统: [cpp]view plaincopy

farsight 构建Linux根文件系统

构建Linux根文件系统 1. 根文件系统 1.1 定义 存放系统启动所必需的文件 内核映像文件(嵌入式系统中,内核一般单独存放在一个分区中); 内核启动后运行的第一个程序(init); shell程序; 应用程序所依赖的库; …... 1.2 目录结构 1.2.1 FHS标准: (Filesystem Hierarchy Standard,文件系统层次标准); 定义文件系统中目录、文件存放的原则,不是强制性标准。 1.2.2 目录: /bin 存放所有用户都可以使用的、基本的命令; 比须和根文件系统在一个分区中。 /sbin 存放系统命令,只有管理员可以使用的命令 必须和根文件系统在同一分区中。 /---/sbin *基本的系统命令,用于启动系统、修复系统等。 *---/usr/sbin *不是急迫需要使用的系统命令。 *---/usr/local/sbin /本地安装的系统命令。 /dev:存放设备文件。 /etc:存放配置文件。 /lib /---libc.so.*动态链接C库。 *---ld*链接器、加载器。 /---modules内核可加载模块存放的目录。 /home:用户目录。 /root:根用户目录。 /usr 存放共享、只读的数据和程序; 可以存放在另一个分区中,系统启动后再挂接到根文件系统的/usr目录下。 /var:存放可变的数据。 /proc proc文件系统的挂接点; proc文件系统是一个虚拟的文件系统,用来表示系统的运行状态。 /mnt:用于临时挂接某个文件系统的挂接点。 /tmp 用于存放临时文件; 为减少对Flash的操作,可以在/tmp目录上挂接内存文件系统。

ramdisk根文件系统制作

制作根文件系统有两种方法 1、利用开发板提供的映像文件制作ramdisk 2、利用busybox制作根文件系统(制作过程复杂) 采用第一种方法制作需要的ramdisk 1、拷贝已有的uramdisk.image.gz 到新建的tmp/下,cp uramdisk.image.gz tmp/ 2、去掉mkimage生成的64 bytes 的文件头,生成新的ramdisk.image.gz $ dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1 3、 gunzip解压ramdisk.image.gz 生成ramdisk.image $ gunzip ramdisk.image.gz 4、新建挂载目录“ramdisk”,并将ramdisk.image挂载 $ sudo mount -o loop,rwramdisk.imageramdisk 5、接下来,只需要将ramdisk目录下的内容全部拷贝到rootfs下即可 cp -R ramdisk /* rootfs 这样就有了自己的rootfs,省去利用busybox制作的麻烦了 有了制作好的rootfs,下面就开始制作映像文件了 1、创建镜像文件ramdisk8M.image,并设置大小为8M,文件系统格式为ext2 $dd if=/dev/zero of=ramdisk8M.image bs=1024 count=8192 $mke2fs -F ramdisk8M.image -L "ramdisk" -b 1024 -m 0 $tune2fs ramdisk8M.image -i 0 $chmod 777 ramdisk8M.image 大小可以按照需要自己调整,但是最好不要超过32M,创建ramdisk目录,将ramdisk8M.image 挂载到该目录下 $mkdirramdisk $mount -o loop ramdisk8M.image ramdisk/ 接下来,只需要将rootfs目录下的内容全部拷贝到ramdisk下即可 $cp -R rootfs/* ramdisk 注意,这里cp的参数一定是R而非r。 这样,这个镜像文件的内容就是rootfs目录下的内容了。将其卸载就可, $umountramdisk/ 到此,根文件系统镜像文件ramdisk8M.image 制作完成,将其压缩 gzip -9 ramdisk8M.image 用mkimage添加文件头,生成新的uramdisk.image.gz 供u-boot 使用 $ mkimage -A arm -T ramdisk -C gzip -n Ramdisk -d ramdisk8M.image.gzuramdisk.image.gz 可以制作一个文件buildfs,如下

相关主题
文本预览
相关文档 最新文档