Linux3.5.2内核移植与文件系统制作

时间:2022-02-23 09:06:23

                 一、工具下载

1、Linux3.5.2下载

  下载地址: www.kernel.org

 

2、yaffs2 代码 

进入 http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/,点击“Download  GNU 

tarball”,下载后出现 cvs-root.tar.gz 压缩包。 

 

3、busybox-1.13.3 

从 http://www.busybox.net/downloads/下载 busybox,这里下载的是 busybox-1.13.3.tar.gz。 

 

4、根文件系统制作工具 

到 友 善 之 臂 http://www.arm9.net/  网 站 下 载 根 文 件 系 统 制 作 工 具

mkyaffs2image.tgz。 

 

5、友善之臂的根文件系统 

在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂

的根文件系统 root_qtopia 中的链接库 lib,到友善之臂网站 http://www.arm9.net/ 

下载 root_qtopia.tgz。 

 

6、硬件平台 

  友善之臂的 tiny4412

 

二、Linux 3.5.2内核移植

1修改对硬件平台的支持。

   先添加对arm的支持,在linux-3.5.2主目录下的Makefile文件下添加如下信息:

ARCH?= arm

CROSS_COMPILE?= /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-

 

2、修改平台时钟

     找到内核源码 arch/arm/mach-exynos/mach-tiny4412.c 文件,在函数  static 

void __init smdk4x12_map_io(void)中,修改成 s3c24xx_init_clocks(24000000)

 

3、 修改 Nand flash 分区信息 

     很多人的做法是直接修改arch/arm/plat-s3c24xx/Common-smdk.c文件里面的smdk_default_nand_part数据结构,这样是不提倡的做法,因为还是那句话,破坏了内核。我们应该在arch/arm/mach-exynos/mach-tiny4412.c文件中建立我们自己板文件的nand信息。我们在mach-tiny4412.cstaticstruct platform_device *smdk2440_devices[]前面添加

static struct mtd_partition smdk_default_nand_part[] = {
        [0] = {
                .name   = "loader",
                .size   = SZ_256K,
                .offset = 0,
             },
        [1] = {
                .name   = "kernel",
                .offset = MTDPART_OFS_APPEND,
                .size   = SZ_1M + SZ_256K + SZ_512K,
             },
        [2] = {
                .name   = "root",
                .offset = SZ_2M,
                .size   = SZ_32M,
             },
        [3] = {
                .name   = "user1",
                .offset = MTDPART_OFS_APPEND,
                .size   = MTDPART_SIZ_FULL,
             }
}; 
修改nand flash的参数: 
在同一个文件中找到 
static struct s3c2410_platform_nand smdk_nand_info = {
    .tacls        = 20,
    .twrph0        = 60,
    .twrph1        = 20,
    .nr_sets    = ARRAY_SIZE(smdk_nand_sets),
    .sets        = smdk_nand_sets,
};
改成 
static struct s3c2410_platform_nand smdk_nand_info = {
    .tacls        = 0,
    .twrph0        = 30,
    .twrph1        = 0,
    .nr_sets    = ARRAY_SIZE(smdk_nand_sets),
    .sets        = smdk_nand_sets,
};

drivers/mtd/nand/s3c2410.c
839                 chip->ecc.mode      = NAND_ECC_NONE;//NAND_ECC_SOFT;


4、建立板文件支持

 

修改arch/arm/mach-exynos/mach-tiny4412.c文件将MACHINE_START宏括号里面的名字换成ID换成TINY4412,,这个ID最终会被扩展为MACH_TYPE_TINY4412然后到arch/arm/tools/mach_types里面找对应的ID号,所有做完以这一步我们要在mach_types添加我们机器的ID

 

以下为主要步骤:

A、重新复制一份mach-smdk4x12.c,并命名为mach-tiny4412.c

[root@localhost arch]#cp arm/mach-exynos/mach-smdk4x12.c arm/mach-exypons/mach-

tiny4412.c

 

利用vi命令打开mach-tiny4412.c文件,修改如下内容(黄色区域)

 

 Linux3.5.2内核移植与文件系统制作

 

 

B[root@localhost linux-3.5.2]#cd arch/arm/tools

   [root@localhost tools]#vi mach_types

    然后在mach_types里面添加我们机器的ID,再最后一行添加

     Tiny4412     MACH_TINY4412        TINY4412  4173  

 第一个表示机器名字,第二个在Kconfig配置项里面定义的宏名称,下面一步我们会定义到,我们取名为MACH_tiny4412,第三表示MACH_START第一个参数ID名字,第四个是ID,ID号我们取为4173。

C修改arch/arm/mach-exynos/目录下的KconfigMakefile,以建立内核对板文件的支持使其可以被配置和编译进内核。

         首先修改Kconfig,在endmenu之前加入下面的内容:

 

 Linux3.5.2内核移植与文件系统制作

 

      再修改Makefile,在Makefile文件中添加如下一行 :obj-$(CONFIG_MACH_TINY4412)+= mach-tiny4412.o

            

D、配置 Linux 内核 

     进入 linux-3.5.2 内核主目录,通过以下命令将 exynos的默认配置文件写到

当前目录下的.config

[root@localhost linux-3.5.2]# cp arch/arm/configs/exynos4_defconfig ./

[root@localhost linux-3.5.2]# make exynos4_defconfig

  

执行加载默认配置文件后,可以开始配置新增加的菜单

[root@localhost linux-3.5.2]# make menuconfig

     进入System Types菜单项,打开SAMSUNG EXYNOS SoCs Support  --->菜单,出现一个目标开发板的列表:

 

 Linux3.5.2内核移植与文件系统制作

  选中tiny4412选项,然后执行make  zImage,如果能够正常编译,可以将能够将体内一412板文件编译进内核.

 如下为编译成功截图:


 Linux3.5.2内核移植与文件系统制作

                                 

三、根文件系统的制作

1、建立根文件系统目录 

进入 到/opt/MyARM 目 录,新 建建立 根 文件系统 目录的 脚本文件

create_rootfs_bash,使用命令 chmod  +x  create_rootfs_bash 改变文件的可执行权

限,./create_rootfs_bash 运行脚本,就完成了根文件系统目录的创建。 

#!/bin/sh 

echo "------Create rootfs directons start...--------" 

mkdir rootfs 

cd rootfs 

echo "--------Create root,dev....----------" 

mkdir root dev etc boot tmp var sys proc lib mnt home 

mkdir etc/init.d etc/rc.d etc/sysconfig 

mkdir usr/sbin usr/bin usr/lib usr/modules 

 

echo "make node in dev/console dev/null" 

mknod -m 600 dev/console c 5 1 

mknod -m 600 dev/null     c 1 3 

  

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp 

 

mkdir var/lib var/lock var/run var/tmp 

 

chmod 1777 tmp 

chmod 1777 var/tmp 

echo "-------make direction done---------" 

改变了 tmp 目录的使用权,让它开启 sticky 位,为 tmp 目录的使用权开启此

位,可确保 tmp 目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式

系统多半是单用户,不过有些嵌入式应用不一定用 root 的权限来执行,因此需

要遵照根文件系统权限位的基本规定来设计。 

动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝 lib 的内

容到新建的根文件目录 lib 内。 

tar zxvf root_qtopia.tgz C /opt/MyARM 

cp rfd /opt/MyARM/root_qtopia/lib/* /opt/MyARM/rootfs/lib/* 

 

2  交叉编译 busybox 

tar zxvf busybox-1.13.3.tar.tgz C /opt/MyARM

 

3、进入源码,修改 Makefile 文件: 

cd /opt/MyARM/busybox-1.13.3 

修改: 

  CROSS_COMPILE  ?= /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-    

  ARCH     ?=arm    

4、配置 busybox 

输入 make menuconfig 进行配置 

(1)Busybox Settings---> 

    General Configuration---> 

     [*] Show verbose applet usage messages 

     [*] Store applet usage messages in compressed form 

     [*] Support install [-s] to install applet links at runtime 

     [*] Enable locale support(system needs locale for this to work) 

Generated by Foxit PDF Creator © Foxit Software

http://www.foxitsoftware.com   For evaluation only.port for long-options 

     [*] Use the devpts filesystem for unix98 PTYs 

     [*] Support writing pidfiles 

     [*] Runtime SUID/SGID configuration via /etc/busybox.config 

     [*]   Suppress warning message if /etc/busybox.conf is not readable 

Build Options---> 

        [*] Build BusyBox as a static binary(no shared libs) 

     [*] Build with Large File Support(for accessing files>2GB) 

Installation Options-> 

     []Dont use /usr 

     Applets links (as soft-links) ---> 

      (./_install) BusyBox installation prefix 

Busybox Library Tuning ---> 

     (6)Minimum password legth 

     (2)MD5:Trade Bytes for Speed 

     [*]Fsater /proc scanning code(+100bytes) 

     [*]Command line editing 

     (1024)Maximum length of input 

     [*]  vi-style line editing commands 

     (15) History size 

     [*]  History saving 

     [*]  Tab completion 

     [*]Fancy shell prompts 

     (4) Copy buffer size ,in kilobytes  

[*]Use ioctl names rather than hex values in error messages 

[*]Support infiniband HW 

 

下面的选项将增加对 mdev 的支持。 

Linux System Utilities   --->                

      [*]Support /etc/mdev.conf          

      [*]Support command execution at device addition/removal 

 

cd /opt/MyARM/busybox-1.13.3 

make CONFIG_PREFIX=/opt/MyARM/rootfs install 

在 rootfs 目录下会生成目录 binsbinusr 和文件 linuxrc 的内容。 

 

6  建立 etc 目录下的配置文件 

1)etc/mdev.conf 文件,内容为空。 

2)、拷贝主机 etc 目录下的 passwdgroupshadow 文件到 rootfs/etc 目录下。 

3)etc/sysconfig 目录下新建文件 HOSTNAME,内容为”YuYanze”。 

4)etc/inittab 文件: 

#etc/inittab 

::sysinit:/etc/init.d/rcS 

::askfirst:-/bin/sh 

::ctrlaltdel:/sbin/reboot 

::shutdown:/bin/umount -a 

5)etc/init.d/rcS 文件: 

#!/bin/sh 

PATH=/sbin:/bin:/usr/sbin:/usr/bin 

runlevel=S 

prevlevel=N 

umask 022 

export PATH runlevel prevlevel 

 

echo "----------munt all----------------" 

mount -a 

mdev -s 

 

echo "***********************************************" 

echo "****************My ARM*********************" 

echo "Kernel version:linux-3.5.1" 

echo "Student:Yu yanze" 

echo "Date:2015.12.15" 

echo "***********************************************" 

 

/bin/hostname -F /etc/sysconfig/HOSTNAME 

使用以下命令改变 rcS 的执行权限: 

Chmod +x rcS 

 

6)etc/fstab 文件: 

#device     mount-point      type      option      dump    fsck    order 

proc           /proc         proc      defaults     0         0 

none           /tmp         ramfs     defaults     0         0 

sysfs          /sys           sysfs     defaults     0         0 

mdev           /dev         ramfs     defaults     0         0 

 

7)etc/profile 文件: 

#Ash profile 

#vim:syntax=sh 

#No core file by defaults 

#ulimit -S -c 0>/dev/null 2>&1 

USER="id -un" 

LOGNAME=$USER 

PS1='[\u@\h=W]#' 

PATH=$PATH 

HOSTNAME='/bin/hostname' 

export USER LOGNAME PS1 PATH 

 

7、制作根文件系统映像文件 

使用以下命令安装好 yaffs 文件系统制作工具:

tar zxvf mkyaffs2image.tgz C / 

/opt/MyARM 目录下,使用命令 mkyaffs2image rootfs rootfs.img 生成根文件系统映像文件。