Linux 内核配置和文件系统的构建

Linux 内核配置和文件系统的构建

一、 实验目的
1.了解嵌入式系统的开发环境、内核的下载和启动过程;
2.了解Linux内核源代码的目录结构及各目录的相关内容,了解Linux内核各配置选项内容和作用,了解Linux内核各配置选项内容和作用,并掌握Linux内核的编译过程;
3.了解嵌入式操作系统中文件系统的类型和作用,了解JFFS2文件系统的优点及其在嵌入式系统中的作用,掌握利用BusyBox软件制作嵌入式文件系统的方法,掌握嵌入式Linux文件系统的挂载过程。
二、 实验环境

  1. 硬件:EELIOD,基于Intel高性能的PXA270处理器的多功能嵌入式开发平台;一台Linux操作系统的PC。
  2. 软件:
    (1) Arm-linux-gcc:交叉编译工具
    (2)Bootloader:嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务完全由bootloader来完成。用于引导嵌入式操作系统的bootloader有U-Boot、vivi、RedBoot等等。其主要作用初始化硬件设备,建立内存空间的映射图,并完成内核的加载,为内核设置启动参数。
    (3) Minicom: Linux 系统用minicom 软件实现串口通信,运行minicom,进入minicom的设置界面。
    (4)tftp :基于UDP协议的简单文件传输协议,目标板作为客户机,bootloader默认采用tftp协议。
    (5)NFS服务器架设:NFS是一项用于在不同机器、不同操作系统之间通过网络共享文件的服务系统。Nfs-server也可以看作是一个文件服务器,它可以让PC通过PC通过网络将远端的nfs server共享出来的档案挂载到自己的系统中。
    (6)Linux内核:Linux-2.4.21-51Board EDR
    (7)BusyBox: busybox_1.00-pre5和busybox-1.1.2
    三、 实验内容
  3. Linux内核的配置和编译,用make menuconfig 对内核进行逐项配置,并用make zImage 编译内核。
  4. 配置编译Busybox,进行编译(make)和安装(make install);接着,配置文件系统,并制作ramdisk文件映像。
  5. 将制作好的内核zImage4和文件系统ramdisk_img4.gz放在tftpboot目录下;开机后在bootloader下配置主机和宿机的IP地址,然后进行tftp下载,boot开机后并调试。
    四、 实验步骤
  6. Linux内核的配置:
    利用make menuconfig对Linux内核进行配置,系统将会产生配置文件“.config”。之前的配置文件备份到“.config.old”,一边恢复上一次的配置。配置文件(.config)中有许多配置变量设置,用来说明配置用户的结果。例如“CONFIG_MODULES=y”表明用户选择了Linux内核的模块功能。其中每个配置变量具有四种不同的取值:
    y——表示本编译选项对应的内核代码被静态编译进Linux内核;
    m——表示本编译选项对应的内核代码被编译成模块;
    n——表示不选择此编译选项;
    如果根本没有选择,那么就配置变量的值为空。
    $ make menuconfig

以下是内核(Linux-2.4.21)配置项的具体配置:
(1)Code maturity level options —>
[] Promprt for development and/or incomplete Code/drivers
代码成熟度选择。可以选择正在开发的内核代码。这个选择表示是否包含beta 版本的程序。
(2) Loadable module support —>
[
] Enable Loadable moduLe Support
使用模块的形式可以将不经常使用的设备驱动或功能组件编译为一个模块,而不加载到内核中。当需要该功能的时候,可以动态的加载到内存中调用。
[ ] Set version information on all Symbols for modules
[] Kernel module Loader
该功能表示内核可以实现模块加载的功能。不使用insmod 和rmmod 命令,kerneld 程序可以在需要的时候自动调用模块,而在不用该功能的时候,自动卸载该模块。可以有效地使用内存,同时减小了内核的大小。
(3) System Type —> 系统选型
(PXA270/250/210-based) ARM system type
Intel PXA270/250/210 Implementations —>
(XSBase270-EDR) XSBase270 Board Type
(4) General setup —> 通用设置
设置网络、总线协议、电源管理功能等。
将内核中默认的内核命令行 “ root=1f02 rw console=ttyS0,115200 mem=64M”修改为:
root=/dev/ram0 rw console=ttyS0,115200 mem=64M
(5) Memory Technology Devices (MTD) —> 存储器技术设备
RAM/ROM/Flash chip drivers —>
[
]Support 32-bit buswidth
[]Support 2-chip flash leave
[
]Support for Intel/Sharp flash chips
Mapping drivers for chip access —>
[] CFI Flash device rmpped on the XScale XSbase270 board
(6) Block devices —> 块存储设备
<
>RAM disk support
(8192) Default RAM disk size
配置系统支持RAM DISK。缺省的RAM DISK 容量为8M(8192),改变该值以改变RAM DISK容量。
(7) Networking options —> 网络配置
[] Network device support
(8) Network device support —> 网络设备驱动
Ethernet (10 or 100Mbit) —>
<
> SMSC LAN91C111 Support for XSBase270 Board
 支持SMSC LAN91C111 设备驱动。
(9) Character devices —> 字符设备驱动
[] VirtuaL terminaL
支持以字符处理的设备,包括超级终端,鼠标,打印机等。
[
] Standard/generic (dumb) SeriaLSupport
使能MODEM,串行鼠标和串行设备。
[] Support for console on virtual terminal
系统console接受所有kernel信息和警告信息,允许以单独用户模式登录。
[
] Support for console on serial Support
该功能使能串口为系统控制终端。系统控制终端是可以接收内核发出的信息的设备。他使用的单用户模块登陆。例如多个消息可以通过一个串口打印机打印出来。系统的缺省控制终端通常是/dev/tty0.假如需要改变系统控制终端为串口2 的话,在内核配置中,使用“ console=ttys1”。使用串口当作控制终端的话,可以直接使用串口线连接到目标机的串口上,对系统进行控制。利用此选项可运行没有VGA卡的Linux系统。
[]Unix98 PTY Support
PTY 是由软件驱动的虚拟设备,有master和slave两个部分组成,与物理终端的操作完全相同。
(10) File systems —> 文件系统
[
] KerneL automounter Support
自动挂载器(automounter) 是一个处理远程系统挂载的工具。可以支持“NFSfilesystem support”
[] Kernel automounter version 4 support (also supports v3)
内核版本自动挂载器是没有必要的,所以在这样选择[N]
<
> Journalling Flash File System (JFFS2) support
JFFS 文件系统是瑞典AXIS 通信公司开发出来提供电源断电保护的文件系统。他通用于没有硬盘的嵌入式系统中。
[] /proc file system support
/proc 是虚拟的文件系统,他提供系统各种状态信息。说他是虚拟的是指他并不占用系统硬盘空间。当你访问/proc 文件下文件的时候,内核将创建该文件。通常使用more 或者cat 程序来查看信息。
[
] /dev/pts file system for Unix98 PTYs
虚拟文件系统可以使用“mount –t devpts”命令挂载在/dev/pts 上。该功能用来支持伪终端设备。例如Unix98 标准。
Network File Systems —>
<> NFS file system support
[
] Provide NFSv3 Client Support
[] Root file System on NFS
(11) Console drivers —> 终端设备驱动
Frame-buffer support —>
[
] Support for frame buffer devices (EXPERIMENTAL)
[] PXA LCD support
LCD type ―――>
(X)Sharp_8
(12) Sound —> 声音支持和声卡驱动
<
>Sound support
<>Intel PXA27x AC97
2. Linux内核的编译:
$make clean: 清除以前构核所产生的所有的目标文件、模块文件、核心及一些临时文件等,不产生任何新文件;
$make dep : 建立依赖关系,产生两个文件“.depend”和“.hdepend”;
$make : 编译内核,通过歌目录的Makefile文件进行,会在各个目录下产生一大堆目标文件,并产生vmlinux;
$make zImage:在make的基础上产生压缩的核心映像文件,在目录arch/arm/boot中产生zImage文件。
3. BusyBox的配置编译:
将下载的BuysBox(busybox_1.00-pre5)软件包解压缩。进入解压目录,执行“make menuconfig”:
(1) Build Options
[
] Build BusyBox as a static binary (no shared libs)
此选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作;
(2) Installation Options
[] Don’t use /usr
(./_install) BusyBox installation prefix
这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接;
(3) Linux Module Utilities
[
] insmod
[] lsmod
[
] modprobe
[] rmmod
(4) Linux System Utilities
[
]mount
[] Support mounting NFS file systems
[
]umount
[] Support forced filesystem unmounting
(5) Editors
[
]vi
其他配置默认,配置好后退出并保存。
$make clean
$make
$make install
4. 配置文件系统:
(1) 创建etc目录,在etc下建立inittab、rc、motd三个文件。
/etc/inittab
此文件由系统启动程序init读取并解释执行,为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。

::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
#tty4::respwan:/sbin/getty 38400 tty5
#tty5::respwan:/sbin/getty 38400 tty6
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a
/etc/rc

此文件要求可执行属性,所以执行“chmod 777 rc”命令修改其属性。rc文件(.sh)第一行的#不是注释。

#!/bin/sh
hostname XScale270
mount -t proc proc /proc
/bin/cat /etc/motd
ifconfig eth0 192.168.207.136
mount 192.168.207.36:/exp /mnt -o nolock -o proto=tcp

/etc/motd
此文件由/etc/rc调用打印在终端上。

/etc/motd
此文件由/etc/rc调用打印在终端上。

Welcome to

ARM-LINUX WORLD

Bose on:Xsbsae270-EDR
ported by xxx xxx

在etc目录下在创建init.d目录,并将/etc/rc向/etc/init.d/rcS做符号链接。

$mkdir init.d
$cd init.d
$ln –s …/rc rcS
(2) 创建dev目录,并在该目录下建立必要的设备:
mknod console c 5 1 mknod mixer c 14 0
mknod dsp c 14 3 mknod audio c 14 4
mknod fb0 c 29 0 ln -s fb0 fb
mknod hda b 3 0 mknod hda1 b 3 1
mkdir input mknod input/misc c 13 63
ln -s input/misc mouse mknod keypad c 151 0
mknod kmem c 1 2 mknod mem c 1 1
mknod mmcda b 241 0 mknod mtd0 c 90 0
mknod mtd1 c 90 2 mknod mtd2 c 90 4
mknod mtd3 c 90 6 mknod mtdblock0 b 31 0
mknod mtdblock1 b 31 1 mknod mtdblock2 b 31 2
mknod mtdblock3 b 31 3 mknod null c 1 3
mknod zero c 1 5 mknod ram0 b 1 0
mknod ram1 b 1 1 ln -s ram0 root
mknod rom0 b 31 0 mknod rom1 b 31 1
mknod rtc c 250 0 mknod sda b 8 0
mknod sda1 b 8 1 mkdir touchscreen
mknod touchscreen/ucb1x00 c 10 24 mknod tty c 5 0
mknod tty0 c 4 0 mknod tty1 c 4 1
mknod tty2 c 4 2
(3) 建立proc空目录,供proc文件系统使用。
$mkdir proc
(4) 建立lib目录,将交叉编译器链接库路径下的下面几个库复制到lib目录:
ld-2.3.2.so
libc-2.3.2.so
libm-2.3.2.so
再做如下软链接:
ln -s ld-2.3.2.so ld-linux.so.2
ln -s libc-2.3.2.so libc.so.6
ln -s libm-2.3.2.so libm.so.6
ln -s libm-2.3.2.so libm.so
(5) 创建mnt空目录:
$mkdir mnt
用于挂载/exp
5. 制作ramdisk文件映像:
在主机上创建一个空文件并将它格式化成ext2fs文件系统映像。格式化后的文件就可以像普通文件系统一样在主机上进行挂载和卸载。挂载后可以进行正常的文件和目录操作,卸载后,如果原映像文件仍然存在,则更新到卸载之前的操作内容。最后将修改确定的ramdisk文件映像用gzip压缩,留待bootloader下载。
$dd if=/dev/zero of=ramdisk_img bs=1k count=8192
$ /sbin/mke2fs ramdisk_img
$mount ramdisk_img
(复制文件系统目录和文件,及其他一些必要的设置)
$umount /mnt/ramdisk
$gzip ramdisk_img

  1. tftp下载:

51Board> tftp ramdisk_img4.gz ramdisk
tftp start…
my ip address : 192.168.207.136
server ip address : 192.168.207.36
filename : ramdisk_img4.gz
store at : 0xA1000000
loading start…
1335204 (0x00145FA4) bytes received. done.
51Board> tftp zImage4 kernel
tftp start…
my ip address : 192.168.207.136
server ip address : 192.168.207.36
filename : zImage4
store at : 0xA0008000
loading start…
772916 (0x000BCB34) bytes received. done.

五、 实验总结

  1. 内核配置的过程中要注意各个选项的选择,要兼顾后面文件系统的配置、以及后续内核驱动程序的配置问题,使得在以后的开发中能够顺利的进行;对于开机图片的改换,需一张同等像素640*480,并且格式为ppm的图片;
  2. BusyBox的配置中主要对于一些命令的选择上,特别注意mount命令中的NFS的支持,否则不能够进行挂载;对于不需要的命令可以舍弃,不要太贪心,做到精简最好;如果重新配置后,最好执行make clean 命令,再进行make和make install;
  3. 在制作ramdisk文件系统时,将ramdisk_img挂载后的操作,需要复制文件系统目录和文件,但有些文件,如dev目录不能够直接复制过去,需要在挂载点目录下重新进行配置,这个有些麻烦;
  4. 在tftp下载过程中,先下载zImage或是ramdisk_img.gz没有特别的要求,但当下载时没有反应,可以调换次序,重新下载;对于tftp下载,一定要注意检查主机和目标机的IP地址是否配置准确,在bootloader界面下,用“set myipaddr”和“set destipaddr”设置IP地址,不然无法下载到对应的目标机上;进入目标机系统后,reboot操作后,要进行tftp重新下载;
  5. 在Bootloader界面下可以设置default Kernel和default Filsystem,这样可以使今后的操作简单,无需用tftp命令进行下载。

作者:breezewin
来源:CSDN
原文:https://blog.csdn.net/breezewin/article/details/7002589
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_40083589/article/details/83216727