分类: LINUX
2010-10-02 19:58:38
硬件平台:ARM9 S3C2440 TQ2440开发板。
软件环境:VM7.1虚拟机;Fedora10;arm-linux-gcc 4.3.3;Linux2.6.35;u-boot2010.06(天嵌原版本)
完善串口驱动
移植YAFFS2文件系统
由于内核默认将串口3当作红外接口来处理,但工程上需要的往往是串口不是红外接口,因此,我们需要将红外接口修改成串口,以方便开发。
将该文件的第100行,修改成:
.ulcon = 0x03,
首先,在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.35在TQ2440上的移植)配置好的前提下,我们已经不用在重新配置了,已经默认支持串口驱动。如果没有配置好,请确认下面的配置单:
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
YAFFS(yet another flash file system)是一种类似于JFFS/JFFS2、专门为NAND FLASH设计的嵌入式文件系统,适用于大容量的存储设备。它是日志型的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少。利用NAND FLASH提供的第个页面16字节的OOB空间来存放ECC(error correction code)和文件系统的组织信息,不仅能够实现错误检测和坏块处理,也能够提高文件系统的加载速度。
根文件系统:与Windows的C盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)、内核启动后运行的第一个程序(init)、给用户提供操作界面的Shell程序、应用程序所依赖的库等。这些必需、基本的文件合称:根文件系统。
注意概念的区分:
根文件系统:是一些文件的集合。
YAFFS2文件系统:是文件系统的格式、类型。
首先下载源码,地址:
将得到的源码解压后,进入其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”
所谓制作根文件系统,就是创建各种目录,并在目录里面创建各种文件。Busybox是一个遵循GPLv2协议的开源项目。它将众多的UNIX命令集合进一个很小的可执行程序中。它为各种小型的或者嵌入式系统提供了一个比较完全的工具集。它在编写过程中对文件大小进行优化,并考虑了系统资源有限的情况。其源码下载地下:
本次使用的是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应用开发完全手册》