【 转载】Linux系统移植

来源:互联网 发布:淘宝首页切图 编辑:程序博客网 时间:2024/05/23 23:23

来自《四种嵌入式WEB服务器介绍》豆丁

Linux内核子目录结构

目录名

描述

arch

体系结构相关的代码,对于每个架构的CPUarch目录下都有一个对应的子目录

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的开发板的默认配置文件。然后再执行makemenuconfig会生成一个基于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 StandardFHS),一个定义许多文件和目录的名字和位置的标准,该标准可以在http://www.pathname.com/fhs中找到。FHS也是用来组织LinuxUnix文件的方法,它使得Linux文件系统布局实现了标准化。

构建Linux根文件系统,就是按照FHS标准,创建各种目录、工具和配置文件。这里首先通过Busybox来创建可执行文件。

       Busybox最初是由BrucePerens1996年为Debian GNU/Linux安装盘编写的。其目标是在一张软盘上创建一个可引导的GNU/Linux系统,这可以用作安装盘和急救盘。一张软盘可以保存大约1.4~1.7MB的内容,因此这里没有多少空间留给Linux内核以及相关的用户应用程序使用

1、首先解压缩源代码,修改顶层Makefile

2、执行makemenuconfig生成一个配置菜单。这里,只需选择默认配置就可以了。

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.confprotocolsmime.typesservices文件,其中定义了常见的网络服务的端口和协议。 

11.最后,创建一些必要的空目录 

mkdir mnt proc root sys tmp var




原创粉丝点击