来自《四种嵌入式WEB服务器介绍》豆丁
Linux内核子目录结构
目录名 | 描述 |
arch | 体系结构相关的代码,对于每个架构的CPU,arch目录下都有一个对应的子目录 |
block | 块设备的通用函数 |
crypto | 常用的加密和散列算法,还有一些压缩和CRC校验算法 |
drivers | 所有的设备驱动程序,里面每个子目录对应着一类驱动程序 |
fs | Linux支持的文件系统的代码,每个子目录对应一种文件系统 |
include | 内核头文件,包括基本头文件、各种驱动或功能部件的头文件以及各种体系结构的头文件 |
init | 内核的初始化代码(不是系统的引导代码) |
ipc | 进程间通信的代码 |
kernel | 内核管理的核心代码 |
lib | 内核用到的一些库函数代码 |
mm | 内存管理代码 |
net | 网络支持代码,每个子目录对应网络的一个方面 |
security | 安全、密钥相关的代码 |
sound | 音频设备的驱动程序 |
usr | 用来制作一个压缩的cpio归档文件 |
documentation | 内核文档 |
scripts | 用于配置、编译内核的脚本文件 |
内核的源代码可以从http://www.kernel.org获取:
1. 首先解压缩内核源代码,修改顶层的Makefile文件
ARCH?= arm
CROSS_COMPILE ?= arm-linux-
这里需要指定目标平台的体系结构和交叉编译工具链的路径。
2. 修改linux-2.6.26.8/arch/arm/mach-s3c2440/mach-smdk2440.c文件
s3c24xx_init_clocks(16934400)修改为s3c24xx_init_clocks(12000000)
指定开发板的晶振频率为12MHz。
3. 修改linux-2.6.26.8/arch/arm/plat-s3c24xx/common-smdk.c文件
内核的源代码可以从http://www.kernel.org获取:
1. 首先解压缩内核源代码,修改顶层的Makefile文件
ARCH?= arm
CROSS_COMPILE ?= arm-linux-
这里需要指定目标平台的体系结构和交叉编译工具链的路径。
2. 修改linux-2.6.26.8/arch/arm/mach-s3c2440/mach-smdk2440.c文件
s3c24xx_init_clocks(16934400)修改为s3c24xx_init_clocks(12000000)
指定开发板的晶振频率为12MHz。
4. 下一步,就是进行内核的配置了。
这里可以参考S3C2410的开发板来进行配置和调整,内核自带了S3C2410开发板的配置文件。在内核源代码根目录下,执行make s3c2410_defconfig,生成一个基于S3C2410的开发板的默认配置文件。然后再执行make menuconfig会生成一个基于S3C2410开发板的内核配置菜单。这里需要保留S3C2410/S3C2440 CPU的相关配置选项、TCP/IP协议、NAND Flash驱动、USB驱动以及适合的文件系统类型。
本文中采用的是JFFS2的文件系统类型。内核默认已经对JFFS2有着非常良好的支持,只需要在配置内核的时候加入相应的配置选项就可以了。
JFFS2文件系统配置如下:
File systems --->
Miscellaneousfilesystems --->
<*>Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 =noisy) (NEW)
[*] JFFS2 write-buffering support (NEW)
[] Verify JFFS2 write-buffer reads(NEW)
[] JFFS2 summary support (EXPERIMENTAL)(NEW)
[] JFFS2 XATTR support (EXPERIMENTAL)(NEW)
[] Advanced compression options forJFFS2 (NEW)
构建根文件系统
Linux遵守文件系统科学分类标准(FilesystemHierarchy Standard,FHS),一个定义许多文件和目录的名字和位置的标准,该标准可以在http://www.pathname.com/fhs中找到。FHS也是用来组织Linux和Unix文件的方法,它使得Linux文件系统布局实现了标准化。
构建Linux根文件系统,就是按照FHS标准,创建各种目录、工具和配置文件。这里首先通过Busybox来创建可执行文件。
Busybox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。一张软盘可以保存大约 1.4~1.7MB 的内容,因此这里没有多少空间留给 Linux 内核以及相关的用户应用程序使用
1、首先解压缩源代码,修改顶层Makefile
2、执行make menuconfig生成一个配置菜单。这里,只需选择默认配置就可以了。
3、最后执行make进行编译,执行make install进行安装。这样会在当前目录下生成一个_install目录。
可执行文件创建好以后,接下来需要建立lib目录,并且复制所需要的共享库。可以通过arm-linux-readelf -a busybox | grep ‘Shared’命令来查看Busybox调用了哪些共享库,然后将其中对应的共享库复制到lib目录中就可以了。
下面根据FHS标准,构建etc配置目录。
1. 创建inittab文件
# System initialization.
::sysinit:/etc/init.d/rcS
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a
::restart:/sbin/init
::askfirst:-/bin/sh
2. 创建init.d/rcS文件
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
umask 022
/bin/mount -a
/bin/mount -t tmpfsmdev /dev
/bin/mkdir /dev/pts
/bin/mount -t devptsdevpts /dev/pts
/bin/mount -t sysfssysfs /sys
echo /sbin/mdev >/proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/mount -t ramfs ramfs /var
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/bin/hostname hrbeu06ws
/sbin/syslogd
3. 创建fstab文件
#device mount-point type options dump fsckorder
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
4.建立dev目录下必备的设备节点
sudomknod console c 5 1
sudomknod null c 1 3
5.创建passwd文件
root:*:0:0:root:/root:/bin/sh
6.创建shadow文件
root:$1$5qCxLMsr$jJgsPqDW8ZJOS8LE4c5n50:0:0:99999:7::1:
7.创建group文件
root::0:
8.创建profile文件
# /etc/profile: system-wide .profile filefor the Bourne shell
if [ "$PS1" ];then
if [ "$(id -u)" -eq 0 ];then
PS1='\u@\h:\w\# '
else
PS1='\u@\h:\w\$ '
fi
fi
HOME=/root
export HOME
9.创建resolv.conf文件
nameserver 202.118.176.2
10.复制主机的inetd.conf、protocols、mime.types和services文件,其中定义了常见的网络服务的端口和协议。
11.最后,创建一些必要的空目录
mkdir mnt proc root sys tmp var