Chinaunix首页 | 论坛 | 博客
  • 博客访问: 803575
  • 博文数量: 869
  • 博客积分: 201
  • 博客等级: 入伍新兵
  • 技术积分: 3376
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 19:42
文章分类

全部博文(869)

文章存档

2014年(4)

2013年(415)

2012年(453)

我的朋友

分类:

2012-10-13 11:10:25

本文为原创,版本归作者:Machoe . Yang 所有。如需转载,请注明:http://machoe.cublog.cn/

环境:

         硬件平台:ARM9 S3C2440 TQ2440开发板。

         软件环境:VM7.1虚拟机;Fedora10arm-linux-gcc 4.3.3Linux2.6.35u-boot2010.06(天嵌原版本)

内容:

完善串口驱动

移植YAFFS2文件系统

一、 串口驱动的移植

由于内核默认将串口3当作红外接口来处理,但工程上需要的往往是串口不是红外接口,因此,我们需要将红外接口修改成串口,以方便开发。

1.       修改arch/arm/mach-s3c2440/mach-smdk.c

将该文件的第100行,修改成: 

.ulcon       = 0x03,

2.       修改驱动源码drivers/serial/Samsung.c

首先,在52行后面加入三个头文件。

53 #include

54 #include

55 #include

然后,在435行加入以下内容:

435         if (port->line == 2) {

 436             s3c2410_gpio_cfgpin(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6), S3C2410_GPH6_TXD2);

 437             s3c2410_gpio_pullup(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 6), 1);

 438             s3c2410_gpio_cfgpin(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 7), S3C2410_GPH7_RXD2);

 439             s3c2410_gpio_pullup(S3C2410_GPIONO(S3C2410_GPIO_BANKH, 7), 1);

 440         }

最后,在889行改成:

889         .dev_name       = "tq2440_serial",

配置

对于上次在前一篇文章(Linux2.6.35TQ2440上的移植)配置好的前提下,我们已经不用在重新配置了,已经默认支持串口驱动。如果没有配置好,请确认下面的配置单:

 

Device Drivers->

     Character  device->

           Serial Drivers->

 

          <*> Samsung SoC serial support                                                    

               [ ] Samsung SoC serial debug                                                      

               [*] Support for console on Samsung SoC serial port                                 

               <*> Samsung S3C2440/S3C2442/S3C2416 Serial port support 

至此,整个串口的驱动移植结束。启动内核时会看到如下打印信息:

Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled

s3c2440-uart.0: tq2440_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2440

s3c2440-uart.1: tq2440_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2440

s3c2440-uart.2: tq2440_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2440

二、 移植YAFFS2文件系统

1、 概念

YAFFS(yet another flash file system)是一种类似于JFFS/JFFS2、专门为NAND FLASH设计的嵌入式文件系统,适用于大容量的存储设备。它是日志型的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少。利用NAND FLASH提供的第个页面16字节的OOB空间来存放ECC(error correction code)和文件系统的组织信息,不仅能够实现错误检测和坏块处理,也能够提高文件系统的加载速度。

根文件系统:与WindowsC盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)、内核启动后运行的第一个程序(init)、给用户提供操作界面的Shell程序、应用程序所依赖的库等。这些必需、基本的文件合称:根文件系统。

注意概念的区分:

根文件系统:是一些文件的集合。

YAFFS2文件系统:是文件系统的格式、类型。

2、 添加对YAFFS2的支持到内核

首先下载源码,地址:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/

将得到的源码解压后,进入其YAFFS2的目录下:

cd cvs/yaffs2/

下面给内核打补丁:

./patch-ker.sh   c   /opt/kernel/linux2.6.35/

其中选项c的意思是将补丁文件COPY到内核相应的目录下,其选项也可以使用l(注意不是数字“1”而是“l”),代表链接的意思。

当成功打上补丁后,大家可以内核的fs目录下看到yaffs2的目录。下面我们来配置内核:

File systems->

     Miscellaneous filesystems  --->

                          <*>   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 YAFFS from doing ECC on tags by default                           

              [ ]       Disable lazy loading   

注意:这里一定要配置进内核,而不是配置成模块。即:选则为“*”,而不是“M

3、利用Busybox构建根文件系统

所谓制作根文件系统,就是创建各种目录,并在目录里面创建各种文件。Busybox是一个遵循GPLv2协议的开源项目。它将众多的UNIX命令集合进一个很小的可执行程序中。它为各种小型的或者嵌入式系统提供了一个比较完全的工具集。它在编写过程中对文件大小进行优化,并考虑了系统资源有限的情况。其源码下载地下:http://www.busybox.net/downloads/

本次使用的是busybox1.16版,下载源码并解压。

解压源码后,进入其目录,首先修改其Makefile文件,使其支持arm平台。修改顶层Makefile文件的164行:  164   CROSS_COMPILE ?= arm-linux-  ;修改190行:  190    ARCH ?= arm

执行 make menuconfig 命令配置Busybox。配置如下:(注:默认配置不再赘述)

     Busybox Settings  --->   

           General Configuration  --->   默认即可

             Build Options  --->

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

                  [ ] Force NOMMU build                                                              

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

                   ()  Cross Compiler prefix                                                          

                   ()  Additional CFLAGS  

           Debugging Options  --->       默认即可                                                   

           Installation Options  --->       默认即可                                                

           Busybox Library Tuning  --->    默认即可

                    (6) Minimum password length                                                       

                    (2) MD5: Trade bytes for speed (0:fast, 3:slow)                                   

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

                     [ ] Support for /etc/networks                                                        

                     [*] Command line editing                                                           

                     (1024) Maximum length of input                                                       

                     [*]   vi-style line editing commands                                               

                     (15)  History size                                                                

                     [*]   History saving                                                              

                     [*]   Tab completion                                                              

                      [*]     Username completion       !此项不选,就会出现提示符错误。                                                     

                      [*]   Fancy shell prompts                                                          

                      [ ]   Query cursor position from terminal                                            

                      [*] Non-POSIX, but safer, copying to special nodes                               

                      [ ] Give more precise messages when copy fails (cp, mv etc)                  

                      (4) Copy buffer size, in kilobytes                                                   

                     [ ] Use clock_gettime(CLOCK_MONOTONIC) syscall                                    

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

                      [*] Support infiniband HW 

  Linux Module Utilities  --->  

             [ ] Simplified modutils                                                           

                [*]   insmod                                                                         

                  [*]   rmmod                                                                        

                  [*]   lsmod                                                                       

                  [*]     Pretty output                                                                

                  [*]   modprobe                                                                       

                  [*]     Blacklist support                                                         

                  [*]   depmod                                                                         

             --- Options common to multiple modutils                                            

                  [ ] Support version 2.2/2.4 Linux kernels (NEW)                                              [ ] Try to load module from a mmap'ed area (NEW)                                

                  [*] Support tainted module checking with new kernels (NEW)                          

                  [*] Support for module.aliases file (NEW)                                            

                  [*] Support for module.symbols file (NEW)                                            

                  (/lib/modules) Default directory containing modules                                  

                  (modules.dep) Default name of modules.dep  

 其它配置选项可根据需要进行配置,这里选择默认即可。配置后,保存配置单,执行命令make;make install进行编译和安装。在安装完后,即可在当前目录下的_INSTALL目录得到想要的文件和目录。

基于2.6.35内核的文件系统和天嵌提供的2.6.30.4的文件系统基本一样,在此就不再重复,大家可以参照天嵌科技提供的移植手册,将剩于的步骤一一完成。

在此,希望和machoe一起学习Linux的初学者,也要看看韦东山老师写的 《嵌入式Linux应用开发完全手册》中的第17章,理解文件系统的一些重要概念和工作流程。

本篇文章只是我自己的学习笔记,只代表个人观点,望高手指点、批评。

参考资料:天嵌科技提供的 《Linux系统移植手册step by step

          韦东山老师写的 《嵌入式Linux应用开发完全手册》

 

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