Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7553608
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2010-08-10 14:51:26

嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212  

      文章——>嵌入式学习入门    全面的讲述学习嵌入式linux中的每个步骤 

 

内核版本:

Linux-2.6.31

交叉编译器版本:

arm-linux-gcc 4.3.2

操作系统平台:

Linux -- Red Hat 9.0

开发板平台:

RAM——TX2440A

> 准备移植

获得内核源码:

Linux-2.6.31.tar.bz2 可到官方网站获得最新版本的内核源码

解压源码,进入目录:

#tar xjvf linux-2.6.31.bz2

#cd linux-2.6.31

 

修改 Makefile 183行:

ARCH = arm    指定系统硬件架构

CROSS_COMPILE ?= arm-linux-   指定交叉编译器

 

修改时钟:

修改arch/arm/mach-s3c2440/mach-smdk2440.c 163

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(12000000); 􀃅输入时钟为12MHz

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

这个一定要设置对,否则会打印出乱码。

 

修改机器码(根据实际情况,这个要和bootloader的匹配):

修改:arch/arm/tools/mach-types 379行:

s3c2440 ……………………… XXX 后面那个数就是机器码

(参考 http://blog.chinaunix.net/u3/117680/showart_2294492.html)

 

配置:

#make menuconfig  进入图形化配置界面

在配置菜单中选择这一项:”Load an Alternate Configuration File

输入2440的默认配置文件:arch/arm/configs/s3c2410_defconfig

说明:这个文件就是S3C24XX系列开发板的板级支持包(BSP

然后选择OK,按回车

进入”System Type”选项单,里面的选项保持默认

在”S3C24XX Machine”选项中只配置这几项(其他的选项取消):

 

#make menuconfig

首先加载s3c24xx系列的通用配置,然后在此基础上修改

 

各配置选项如下。这里只列出了要修改的项,其他的默认

 

在编译时系统启动最后可能会出现这个错误:

Kernel panic - not syncing: Attempted to kill init!

然后出打印出一些很乱的东西。

因为用4.X.X版本的交叉编译器使用EABI,但内核默认是不支持EABI编译的,所以编译出的系统会报错,但用3.X.X版本的编译器就不会出现这个问题。

解决办法是,配置内核支持EABI编译

Kernel Features --->

[*] Use the ARM EABI to compile the kernel

[*]  Allow old ABI binaries to run with this kernel (EXPERIMENTA)

 

配置完后,回到主菜单,选择这一项Save an Alternate Configuration File输入要保存的配置文件名称:.config (默认)

退出,编译内核: #make zImage

说明:以后移植过程中的配置、编译,都是按这个步骤进行,但是只需要保存一次配置文件,以后就不需要再保存配置文件了,配置完后可以直接退出。

 

编译完后,会在arch/arm/boot下生成zImage内核镜像文件

可以修改该目录下的Makefile: 在第57行下面添加:

@cp f arch/arm/boot/zImage zImage

@echo ` Kernel: $@ is ready`

这样执行make zImage后,就把生成的zImage拷到内核根目录下

如果希望在在执行make distclean时,也同时把zImage删除,

可以修改内核源码目录下Makefile的第1247行,在后面加上:

-type f print | xargs rm f rm zImage

 

zImage镜像烧进NandFlash跑一下,看是否正常打印出信息

 

可以参考linux下tftp使用方法

http://blog.chinaunix.net/u3/117680/showart.php?id=2295231

 

 

 

 

如果第一步能正常引导内核,那就开始进行第二步,添加NAND驱动

 

修改:arch/arm/plat-s3c24xx/common-smdk.c文件,在第110行:
这里我们要使nandflash支持256M容量。

 

/* NAND parititon from 2.4.18-swl5 */

 

static struct mtd_partition smdk_default_nand_part[] = {

       [0] = {

              .name      = "Boot",

              .size = SZ_1M,

              .offset     = 0,

       },

       [1] = {

              .name      = "Kernel",

              .offset = MTDPART_OFS_APPEND,

              .size = SZ_4M,

       },

       [2] = {

              .name      = "yaffs2",

              .offset = MTDPART_OFS_APPEND,

              .size = MTDPART_SIZ_FULL,

       },   

};

 

 配置内核选项

 

[*] S3C2410 NAND Hardware ECC //这个也要选上

 

启动时输出:
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c24xx-nand s3c2440-nand: Tacls=1, 10ns Twrph0=3 30ns, Twrph1=1 10ns
s3c24xx-nand s3c2440-nand: NAND hardware ECC
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x000000000000-0x000000100000 : "boot"
0x000000120000-0x000000520000 : "kernel"
0x000000520000-0x000010000000 : "yaffs2"

 

这步完成

支持yaffs2文件系统

下载yaffs2源码

文件: yaffs2.tar.gz
大小: 293KB
下载: 下载

 

解压,进入yaffs2目录:

#tar xzvf yaffs2.tar.gz

#cd cvs/yaffs2/

给内核打上yaffs2文件系统的补丁,执行:

#./patch-ker.sh c /………/linux-2.6.31/   <-这个是你的内核源码的目录

这时内核源码fs目录下多了一个yaffs2目录,同时Makefile文件和Kconfig文件也增加了yaffs2的配置和编译条件。

配置对yaffs2支持:

这部分配置的比较多,可根据自己的需要进行配置,把不用的文件系统都去掉,

下面配置:

3. 配置内核,使其对yaffs2文件系统的支持。配置完后重新编译内核,下载到开发板上

File systems --->
    < > Second extended fs support
    < > Ext3 journalling file system support
    < > The Extended 4 (ext4) filesystem
    < > Reiserfs support
    < > JFS filesystem support
    < > XFS filesystem support
    < > OCFS2 file system support
    < > Btrfs filesystem (EXPERIMENTAL) Unstable disk format
    [*] Enable POSIX file locking API
    [*] Dnotify support
    [*] Inotify file change notification support
    [*] Inotify support for userspace
    [ ] Quota support
     Kernel automounter support
     Kernel automounter version 4 support (also supports v3)
     FUSE (Filesystem in Userspace) support
        Caches --->
        CD-ROM/DVD Filesystems --->
            <*> ISO 9660 CDROM file system support
            [ ] Microsoft Joliet CDROM extensions
            [ ] Transparent decompression extension
            < > UDF file system support
        DOS/FAT/NT Filesystems --->
            <*> MSDOS fs support
            <*> VFAT (Windows-95) fs support
            (437) Default codepage for FAT
            (iso8859-1) Default iocharset for FAT
            < > NTFS file system support
        Pseudo filesystems --->
    [*] Miscellaneous filesystems --->
        --- Miscellaneous filesystems
        < > ADFS file system support (EXPERIMENTAL)
        < > Amiga FFS file system support (EXPERIMENTAL)
        < > Apple Macintosh file system support (EXPERIMENTAL)
        < > Apple Extended HFS file system support
        < > BeOS file system (BeFS) support (read only) (EXPERIMENTAL)
        < > BFS file system support (EXPERIMENTAL)
        < > EFS file system support (read only) (EXPERIMENTAL)
        <*> YAFFS2 file system support
        -*- 512 byte / page devices
        [ ] Use older-style on-NAND data format with pageStatus byte
        [ ] Lets Yaffs do its own ECC
        -*- 2048 byte (or larger) / page devices
        [*] Autoselect yaffs2 format
        [ ] Disable lazy loading
        [ ] Turn off wide tnodes
        [ ] Force chunk erase check
        [*] Cache short names in RAM
        <*> Journalling Flash File System v2 (JFFS2) support
        (0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
        [*] JFFS2 write-buffering support
        [ ] Verify JFFS2 write-buffer reads
        [*] JFFS2 summary support (EXPERIMENTAL)
        [ ] JFFS2 XATTR support (EXPERIMENTAL)
        [ ] Advanced compression options for JFFS2
        <*> Compressed ROM file system support (cramfs)
         SquashFS 4.0 - Squashed file system support
        [ ] Additional option for memory-constrained systems
        < > FreeVxFS file system support (VERITAS VxFS(TM) compatible)
        < > Minix file system support
        < > SonicBlue Optimized MPEG File System support
        < > OS/2 HPFS file system support
        < > QNX4 file system support (read only)
        <*> ROM file system support
        RomFS backing stores (Block device-backed ROM file system support) --
        < > System V/Xenix/V7/Coherent file system support
        < > UFS file system support (read only)
        < > NILFS2 file system support (EXPERIMENTAL)
    [*] Network File Systems --->
        Partition Types --->
    -*- Native language support --->
    < > Distributed Lock Manager (DLM) --->

 

配置语言选项:

Native Language support --->

(iso8859-1) Default NLS Option

<*> Codepage 437(United States, Canada)

<*> Simplified Chinese charset(CP936, GB2312)

<*> NLS ISO8859-1 (Latin 1; Western European Language)

<*> NLS UTF-8

 

说明:现在内核已经支持NandFlashyaffs2文件系统,将内核烧入NandFlash后,再烧入yaffs2文件系统,可以使用制作好的文件系统,也可以自己制作,详细的制作文件系统方法,请查看下篇

启动时(成功挂载文件系统)输出:

yaffs: dev is 32505858 name is "mtdblock2"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.2, "mtdblock2"

yaffs: auto selecting yaffs2

yaffs_read_super: isCheckpointed 0

VFS: Mounted root (yaffs filesystem) on device 31:2.

Freeing init memory: 196K

 

 

 

 

 

阅读(2420) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~