×
单片机 > 单片机程序设计 > 详情

linux-2.6.22.1在s3c2410移植全过程

发布时间:2020-06-08 发布时间:
|

这两天一直致力于linux 2.6.22.1 的移植工作,虽然遇到过很多困难浪费过很多时间,但是昨晚终于出来了。现将其移植的详细过程贴出来供大家参考,如果按我说的做没有成功,可能与你的开发板以及电脑配置有关系。我还列出了我在移植过程只能中遇到的种种问题及解决方案,希望对有相同爱好兴趣的你有所帮助。


一.各种开发环境介绍

bootloader编译环境:

vivi版本:0.1.4

交叉编译器(CROSS-COMPILE)版本:2.95.3

操作系统:Fedora 6(在VMware 6.0.0 安装的,其实和直接安装没什么区别)

linux内核编译环境:

内核版本:linux2.6.22.1

(下载地址:

交叉编译器(CROSS-COMPILE)版本: 4.2.0

(下载地址:

http://www.codesourcery.com/gnu_toolchains/arm/download.html)

注意:下载选项,要选 ARM EABI 的选项,和 IA32 GNU/linux

操作系统: 同上

文件系统:用自带的root_china.tar.gz

可以到我的网络硬盘中下载 http://www.disk1000.cn/?zjksn88

注意:关于所用到的各种交叉编译器我已经都打包放到我的网络硬盘里了,如果需要的话可以下载,希望给你带来一定的方便。

二:搭建交叉编译环境

说明:由于编译交叉编译环境比较繁琐,建议大家用已经编译好的交叉编译环境。

下面以3.3.2的交叉编译环境的搭建为例,其他的两个的编译器环境搭建一样。

1. 解压文件命令: 

  tar jxvf          obsolete-gcc-3.3.2.tar.bz2 

  (obsolete-gcc-3.3.2.tar.bz2下载地址:http://linux.omap.com/pub/toolchain/)

2. 把解压的文件夹中的 “3.3.2”文件夹拷贝到 /usr/local/arm目录下 

  (如果没有arm目录就新建arm目录,但是一定要是拷贝到这个目录,不然不能运行)。

3. 在命令窗口输入 

   export PATH=/usr/local/arm/3.3.2/bin:$PATH

4. 如果输入 arm- 然后按下tab键能自动补全命令 arm-linux- 说明搭建成功。

三:bootloader 编译

 我用的开发板已经把vivi 烧写好了,所以本人没有编译烧写bootloader 。如果你的开发板没有做好的bootloader ,请参考http://bbs.ss.pku.edu.cn/ss/index.php/5836/action_viewspace_itemid_11861.html

四: 内核 编译

1. 修改 Makefile

[root@localhost src]# cd linux-2.6.22

[root@localhost linux-2.6.22.1]# vi Makefile

修改 ARCH 和 CROSS_COMPILE

--------------------------------------------------------------

ARCH                   ?= arm

CROSS_COMPILE      ?=/usr/local/arm/arm-2007q1/bin/arm-none-eabi-

2. 修改common-smdk.c文件

[root@localhost linux-2.6.22.1]# vi arch/arm/plat-s3c24xx/common-smdk.c

static struct mtd_partition smdk_default_nand_part[] = {

               [0] = {

                        name: "vivi", 

              size: 0x00020000,

              offset: 0,

               }, 

               [1] = { 

                         name: "param", 

              size: 0x00010000, 

              offset: 0x00020000,

               }, 

               [2] = { 

                         name: "kernel", 

              size: 0x001c0000,

              offset: 0x00030000,

               }, 

               [3] = { 

                        name: "root", 

              size: 0x00400000,

              offset: 0x00200000,

              mask_flags: MTD_WRITEABLE,

               },

[4] = { 

                     name: "usr", 

              size: 0x03a00000,

              offset: 0x00600000,

               }

/* 

               [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, 

               }

*/

};

注意:上边所写的分区信息必须和 vivi 的分区信息相同,否则烧写上的内核不能运行。至于查看vivi 的分区信息就是 在 vivi 目录下输入vim ./arch/s3c2410/smdk.c 命令就可以在

mtd_partition_t default_mtd_partitions[] = {  。。。}

看到vivi的分区信息了。

修改 arch\arm\mach-s3c2410\mach-smdk2410.c 文件

              Startic struct platform_device *smdk2410_devices[] __initdata={

                     &s3c_device_usb, 

                     &s3c_device_lcd;

                     &s3c_device_wdt, 

                     &s3c_device_i2c;

                     &s3c_device_iis,

                     &s3c_device_nand, /*add here*/

3. 去掉nand flash 的ECC

[root@localhost linux-2.6.22]# vim drivers/mtd/nand/s3c2410.c

--------------------------------------------------------------

1、打开drivers/mtd/nand/s3c2410.c

2、搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里

3、修改NAND_ECC_SOFT为NAND_ECC_NONE

-----------------------------------------------------------------

4. 支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统。

[root@localhost linux-2.6.22]# vi fs/Kconfig

--------------------------------------------------------------------

找到menu "Pseudo filesystems"

添加如下语句:

config DEVFS_FS 

          bool "/dev file system support (OBSOLETE)" 

          default y

config DEVFS_MOUNT 

          bool "Automatically mount at boot" 

          default y 

          depends on DEVFS_FS

--------------------------------------------------------------------

5. 编译内核

[root@localhost linux-2.6.22.1]# cp ./arch/arm/configs/s3c2410_defconfig .config

[root@localhost linux-2.6.21.1]# make xconfig

---------------------------------------------------------------------

配置如下:

Userspace binary formats

                [ ]Kernel support for a.out and ECOFF binaries (BINFMT_AOUT) (去除该选项)

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Default kernel command string:

noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

mtdblock3 代表第四个flash分区,为root分区

Floating point emulation---->

[*]NWFPE math emulation

#MTD子系统的配置

Device Drivers--->

Memory Technology Devices(MTD)--->

............................................

[*]MTD partitioning support

[*]Command line partition table parsing

............................................

NAND Flash Device Drivers--->

................................

NAND Device Support

NAND Flash support foe S3C2410/S3C2440 Soc

Character devices--->

.............................

[*]S3C2410 RTC Driver

File systems--->

<>Second extended fs support #去除ext2支持

Pseudo filesystems--->

[*]Virtual memory file system support(former shm fs)

[*]/dev file system support(OBSOLETE)

[*]Automatically mount at boot(NEW)

Miscellaneous filesystems--->

............................

cramfs

.............................

Network File Systems---->

NFS file system support

6. 编译

[root@localhost linux-2.6.22.1]# make zImage

五: 文件系统的修改

下载我的网络硬盘里的root_china.tar.gz ,解压以后用命令进入root_china 文件夹下的dev 文件下,然后输入mknod console c 5 1 就可以了。接下来就是将root_china 文件夹里的所有文件做成文件系统。用命令退回到root_china上一级文件夹然后用制作工具mkcramfs 将其制成文件系统(mkcramfs工具也在我的网络硬盘里)执行 ./mkcramfs root_china root_china.cramfs

就可以将其制成可烧写的cramfs文件系统了。

所有的修改就到这里了,剩下的就是将做成的内核镜像zImage 和文件系统镜像root_china.cramfs 烧写到开发板上。

我烧写完之后的情况是这样的

出现问题即解决方案:

1.分区表不能正确显示出来?

解决方案:查看内核的分区与bootloader  的分区是不是一样,如果不一样就改成一样的。

2.出现     VFS: Mounted root (cramfs filesystem) readonly.

              Freeing init memory: 112K

             Warning: unable to open an initial console.

的现象?

解决方案:出现此现象的原因是不能正确挂接文件系统。在2。6以前的版本挂接文件系统时会在dev 文件夹下自动生成console 文件。在以后的版本就不会自动生成了必须手动添加此文件的节点加上mknod console c 5 1 就可以了。此问题困扰了我好长时间呢。





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍