linux-2.6.18内核移植及根文件系统的制做(简易)

时间:2021-07-18 09:19:31
linux-2.6.18内核移植及根文件系统的制做(简易)
一、 去 http://www.kernel.org 下载内核,下面以 linux-2.6.18.tar.bz2 为例。
[root@Binnary ~ ]# tar –jxvf linux-2.6.18.tar.bz2
[root@Binnary ~ ]# cd linux-2.6.18
二、 修改Makefile 文件
[root@Binnary linux-2.6.18 ]# vi Makefile
ARCH        ?= arm
CROSS_COMPILE   ?= arm-linux-
三、查看开发板分区信息(以此以GEC2410为例)
vivi>part show

[root@Binnary linux-2.6.18 ]# vi arch/arm/mach-s3c2410/common-smdk.c
static struct mtd_partition smdk_default_nand_part[] = {
    [0] = {
        .name   = "boot",
        .size   = 0x30000,
        .offset = 0,
    },
    [1] = {
        .name   = "kernel",
        .offset = 0x30000,
        .size   = 0x1d0000,
    },
    [2] = {
        .name   = "rootfs",
        .offset = 0x200000,
        .size   = 0x1f0000,
    },
    [3] = {
        .name   = "ext-fs",
        .offset = 0x2100000,
        .size   = 0x1f00000,
}/*,
 [4] = {
        .name   = "S3C2410 flash partition 4",
        .offset = SZ_1M * 10,
        .size   = SZ_4M,
    },
    [5] = {
        .name   = "S3C2410 flash partition 5",
        .offset = SZ_1M * 14,
        .size   = SZ_1M * 10,
    },
    [6] = {
        .name   = "S3C2410 flash partition 6",
        .offset = SZ_1M * 24,
        .size   = SZ_1M * 24,
    },
    [7] = {
        .name   = "S3C2410 flash partition 7",
        .offset = SZ_1M * 48,
        .size   = SZ_16M,
    }*/
};
三、 去掉ECC交验
[root@Binnary linux-2.6.18 ]# vi drivers/mtd/nand/s3c2410.c
575         chip->ecc.mode      = NAND_ECC_NONE;
chip->ecc.mode = NAND_ECC_SOFT ,改为如下 chip->ecc.mode = NAND_ECC_NONE。 
四、 devfs的支持
[root@Binnary linux-2.6.18 ]# vi fs/Kconfig
在Pseudo filesystem主菜单添加我们要支持的内容。
904 config DEVFS_FS
    905     bool "/dev file system support(OBSOLETE)"
    906     depends on EXPERIMENTAL
    907     default y
    908     help
    909         the help from binnary.
    910
    911 config DEVFS_MOUNT
    912     bool "automatically mount at boot"
    913     depends on DEVFS_FS
    914     default y
    915     help
    916         The help from Binnary.
    917
    918 config DEVFS_DEBUG
    919     bool "Debug devfs"
    920     depends on DEVFS_FS
    921     help
    922         The help from binnary.
    923
    924 endmenu
五、 yaffs2补丁
[root@Binnary linux-2.6.18 ]# cd ..
[root@Binnary ~ ]# tar –jxvf yaffs2.tar.bz2
[root@Binnary ~ ]# cd yaffs
[root@Binnary yaffs ]#./patch-ker.sh ../linux-2.6.18
六、 MTD分区的支持
[root@Binnary linux-2.6.18 ]# cd ../linux-2.6.18
[root@Binnary linux-2.6.18 ]# make smdk2410_defconfig
[root@Binnary linux-2.6.18 ]# make menuconfig
System Type  --->
ARM system type (Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442)  --->
(X) Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442
S3C24XX Implementations  --->
[*] SMDK2410/A9M2410
Device Drivers  --->
Memory Technology Devices (MTD)  --->
[*] Memory Technology Device (MTD) support
[*]   MTD partitioning support
[*]     Command line partition table parsing
[*]   Direct char device access to MTD devices
[*]   Caching block device access to MTD devices
NAND Flash Device Drivers  --->
[*] NAND Device Support
[*] NAND Flash support for S3C2410/S3C2440 SoC
七、 编译内核
[root@Binnary linux-2.6.18 ]# make
[root@Binnary linux-2.6.18 ]# cp arch/arm/boot/zImage /root




根文件系统的制作
[root@Binnary ~ ]# mkdir rootfs
[root@Binnary ~ ]#cd rootfs
[root@Binnary rootfs ]# mkdir bin dev etc lib proc sbin usr var tmp
[root@Binnary rootfs ]#chmod 1777 tmp
[root@Binnary rootfs ]#mkdir usr/bin usr/lib usr/sbin
[root@Binnary rootfs ]#vi etc/fstab
none /proc proc defaults 0 0
[root@Binnary rootfs ]#chmod 755 etc/fstab
 [root@Binnary rootfs ]#vi etc/inittab
::sysinit:/etc/init.d/rcS
::sysinit:/bin/sh
[root@Binnary rootfs ]#chmod 7555 etc/inittab
[root@Binnary rootfs ]#mkdir etc/init.d
[root@Binnary rootfs ]#vi etc/init.d/rcS
/bin/mount –a
[root@Binnary rootfs ]# mknod –m 600 dev/console c 5 1
[root@Binnary rootfs ]# mknod –m 666 dev/null c 1 3
复制链接文件
[root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil
>do
>cp $file-*.so ~/rootfs/lib
>cp –d $file.so.[*0-9] ~/rootfs/lib
>done
[root@binnary lib ]#cp –d ld*.so* ~/rootfs/lib
[root@Binnary ~ ]# tar –jxvf busybox-1.9.2.tar.bz2
[root@binnary ~ ]# cd busybox-1.9.2
[root@binnary busybox-1.9.2 ]# make menuconfig
[root@binnary busybox-1.9.2 ]# make
[root@binnary busybox-1.9.2 ]#make install
[root@binnary busybox-1.9.2 ]#cd _install
[root@binnary _install ]# cp –Rvf * ~/rootfs/

根据实际情况来修改下面的脚本文件:
cd ~
if [ -d ~/rootfs ] ;then #判断家目录下是否有rootfs文件夹,如果话就退出程序
echo "The home is have rootfs directory!!"
echo "Can\`t create rootfs ,program exit. "
else
mkdir rootfs
cd rootfs
for file in bin dev etc lib proc sbin usr var tmp  #用for循环来创建文件夹
do
mkdir $file
echo "The $file is create......"
done
chmod 1777 tmp
echo "tmp directory right is 1777"

mkdir  usr/bin usr/lib usr/sbin
echo "Create usr/bin,lib,sbin"
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 var/tmp
echo "Create var/lib,lock,log,run,tmp"

echo "none /proc proc defaults 0 0" > etc/fstab
chmod 755 etc/fstab
echo "The fstab is create,the right is 755 ."

echo "::sysinit:/etc/init.d/rcS" > etc/inittab
echo "::sysinit:/bin/sh" >> etc/inittab
chmod 755 etc/inittab
echo "The inittab is create,the right is 755 ."

touch etc/busybox.conf

mkdir etc/init.d
echo "#!/bin/sh" > etc/init.d/rcS
echo "/bin/mount -a" >> etc/init.d/rcS
chmod 755 etc/init.d/rcS
echo " rcS is create,the right is 755"

echo "#!/bin/sh" > etc/profile
echo "PS1=[\\w]#" >> etc/profile
echo "alias ll='ls -l'" >> etc/profile
chmod 755 etc/profile
echo "The profile is create.the right is 755."

mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
echo "console driver is create.c 5 1 the right is 600"
echo "null driver is create. c 13 the right is 666"

cd /armtools/arm-linux/lib
for file in libc libcrypt libdl libm libpthread libresolv libutil
do
cp $file-*.so ~/rootfs/lib
cp -d $file.so.[*0-9] ~/rootfs/lib
done
cp -d ld*.so* ~/rootfs/lib

if [ "$1" = "" ] ;then  #判断 busybox 的路径
echo ""
echo "You don\`t input the busybox path."
echo "Please copy busybox file for youself."
echo ""
else
if [ -d $1/_install ] ;then #复制busybox产生的文件
echo "copy busybox file ...... "
cd $1/_install
cp -Rvf $1/_install/* ~/rootfs/ > /dev/null
echo "copy busybox file is done."
cd ~
if [ -f ~/root.cramfs ] ;then
echo "the root.cramfs is have.Please input the other name."
read name
echo "makeing file system ......"
mkcramfs rootfs $name.cramfs
echo "The file system is done."
echo ""
echo "The root.cramfs is at ~/$name.cramfs."
echo ""
else
echo "makeing file system ......"
mkcramfs rootfs root.cramfs
echo "The file system is done."
echo ""
echo "The root.cramfs is at ~/root.cramfs."
echo ""
fi
else
echo ""
echo "You input the path is wrong.do not copy busybox file."
echo ""
fi
fi
fi




6 个解决方案

#1


复制链接文件 
[root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil 
>do 
>cp $file-*.so ~/rootfs/lib 
>cp –d $file.so.[*0-9] ~/rootfs/lib 
>done 

运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?

#2


引用 1 楼 wonsoft 的回复:
复制链接文件 
[root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil 
>do 
>cp $file-*.so ~/rootfs/lib 
>cp –d $file.so.[*0-9] ~/rootfs/lib 
>done 

运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?


我是直接在命令行中运行的,后面做了一个文件,就没这个问题了。

#3


2.6.18不是连devfs的源代码树都没有吗了?还能这样做?怪怪哦

#4


mark

#5


mark

#6


不错,留着

#1


复制链接文件 
[root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil 
>do 
>cp $file-*.so ~/rootfs/lib 
>cp –d $file.so.[*0-9] ~/rootfs/lib 
>done 

运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?

#2


引用 1 楼 wonsoft 的回复:
复制链接文件 
[root@binnary lib ]# for file in libc libcrypt libdl libm libpthread libresolv libutil 
>do 
>cp $file-*.so ~/rootfs/lib 
>cp –d $file.so.[*0-9] ~/rootfs/lib 
>done 

运行不了啊?!报错哦。我在/usr/lib/下运行的。楼主,怎么回事呢?


我是直接在命令行中运行的,后面做了一个文件,就没这个问题了。

#3


2.6.18不是连devfs的源代码树都没有吗了?还能这样做?怪怪哦

#4


mark

#5


mark

#6


不错,留着