网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 嵌入式系统 > 文章  
Linux 2.6 内核的嵌入式系统应用
文章来源: 电子技术应用 文章作者: 华中科技大学 信息与系统技术研 发布时间: 2006-07-12   字体: [ ]  
 

1.3 同步原型与共享内存

 

多进程应用程序需要共享内存和外设资源,为避免竞争采用了互斥的方法保证资源在同一时刻只被一个任务访问。Linux内核用一个系统调用来决定一个线程阻塞或是继续执行来实现互斥,在线程继续执行时,这个费时的系统调用就没有必要了。Linux2.6所支持的Fast User-Space Mutexes 可以从用户空间检测是不是需要阻塞线程,只在需要时执行系统调用终止线程。它同样采用调度优先级来确定将要执行的进程[4] 多处理器嵌入式系统各处理器之间需要共享内存,对称多处理技术对内存访问采用同等优先级,在很大程度上限制了系统的可量测性和处理效率。Linux2.6则提供了新的管理方法——NUMA(Non Uniform Memory Access) NUMA根据处理器和内存的拓扑布局,在发生内存竞争时,给予不同处理器不同级别权限以解决内存抢占瓶颈,提高吞吐量。

 

1.4 POSIX线程及NPTL

 

新的线程模型基于一个1:1的线程模型(一个内核线程对应一个用户线程),包括内核对新的 NPTL(Native POSIX Threading Library)的支持,这是对以前内核线程方法的明显改进。2.6内核同时还提供POSIX signalsPOSIX high-resolution timersPOSIX signals不会丢失,并且可以携带线程间或处理器间的通信信息。

 

嵌入式系统要求系统按时间表执行任务,POSIX timer可以提供1kHz的触发器使这一切变得简单,从而可以有效地控制进度。

 

1.5 微控制器的支持

 

Linux2.6内核加入了多种微控制器的支持。无MMU的处理器以前只能利用一些改进的分支版本,uClinux,2.6内核已经将其整合进了新的内核中,开始支持多种流行的无MMU微控制器,DragonballColdFireHitachi H8/300Linux在无MMU控制器上仍旧支持多任务处理,但没有内存保护功能。同时也加入了许多流行的控制器的支持,S3C2410等。

 

1.6 面向应用

 

嵌入式应用有用户定制的特点,硬件设计都针对特定应用开发,这给系统带来对非标准化设计支持的问题(IRQ的管理)。为了更好地实现,可以采用部件化的操作系统Linux2.6采用的子系统架构将功能模块化,可以定制而对其他部分影响最小。同时Linux2.6提供了多种新技术的支持以实现各种应用开发,Advanced Linux Sound Architecture(ALSA)Video4Linux,对多媒体信息处理更加方便;USB2.0的支持,提供更高速的传输,增加蓝牙无线接口、音频数据链接和面向链接的数据传输L2CAP,满足短距离的无线连接的需要;而且在2.6内核中还可以配置成无输入和显示的纯粹无用户接口系统。

 

2 应用研究

 

S3C2410开发板上移植嵌入式Linux 2.6.11.7内核系统,应用于构建H.264多媒体系统。

 

2.1 建立交叉编译环境

 

RedHat9的主机上进行内核移植开发,首先需要建立交叉编译环境。由于2.6内核中采用了一些新的特性和指令,需要采用较新的工具集,采用binutils-2.15gcc-3.4.2glibc-2.2.5linux-2.6.8glibc-linuxthreads-2.2.5来建立交叉编译工具链,建立之后将工具链路径加入系统路径$PATH中。

 

2.2 内核修改

 

Linux 2.6.11.7内核加入了对S3C2410芯片的支持,不再需要任何补丁文件。修改内核源码中Makefile的交叉编译选项ARCH=arm,CROSS_COMPILE=arm-linux-。针对硬件配置,需要在arch/arm/mach-s3c2410/devs.c或者smdk2410.c中添加FLASH的分区信息s3c_nand_info,如表1

 

1 NAND FLASH分区表

 

分区名

起始地址

Vivi

0x00000000

0x00020000

Param

0x00020000

0x00010000

Kernel

0x00030000

0x001c0000

Root

0x00200000

0x00200000

Usr

0x00400000

0x03c00000

 

然后在s3c_device_nand中增加.dev={.platform_data= &s3c_nand_info},arch/arm/mach-s3c2410/mach-smdk2410.c中的__initdata部分增加&s3c_device_nand,使内核在启动时初始化NAND FLASH信息。

 

2.3 内核编译加载

 

内核进行适当的配置是一个量体裁衣的过程。由于2.6内核会根据本地系统配置进行初始设置,可以导入内核源码默认s3c2410的配置文件,方便加载内核基本配置,然后再选择所需选项。对MTD配置选择支持MTD设备驱动以及NAND FLASH驱动;选择支持要用到的各类文件系统(DEVFSTMPFSCRAMFSYAFFSEXT2NFS)以及网络设备和协议,本系统加载了网络芯片CS8900以及USB支持;H.264多媒体系统中还需要加载Frame buffer以支持LCD显示功能。使用交叉编译工具编译内核源码后, 会在arch/arm/boot/下生成名为zImage的内核映像,Boot loader的命令提示模式下使用下载命令完成内核加载到开发板的存储设备FLASH中。编译过程(相对以前版本的编译过程,2.6内核编译有所简化):

 

make mrproper

make menuconfig (字符界面,或者用make xconfig图形界面,但需要Qt库的支持,make gconfig则需要GTK库的支持)

make

make bzImage

 

 
推荐文章
·浅谈关于Linux系统内核的源代码
·嵌入式Linux平台的多协议路由器
·恰当选择嵌入式Linux环境下的GUI
·嵌入式Linux系统的MiniGUI研究和
·基于Linux的移动电话开发技术及
·嵌入式uClinux的内核结构和开发
·基于 GTK+ 和 X-window 的 GUI
·基于Qt/Embedded和Qtopia的GUI设
·打造适合自己Slackware机器的内
·自己动手做一个最小的Linux kern
·一个Linux爱好者的2.6.11内核编
·定制Linux系统内核,发挥Linux潜
·如何编译一个操作系统内核-Ubunt
·重新编译Linux操作系统的内核指
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·ARM的嵌入式Linux移植体
·U-Boot简介
·基于Qt/Embedded的GUI移
·基于Qt/Embedded和Qtopi
·U-BOOT的启动流程及移植
·ARM的嵌入式Linux移植体
·几种Linux嵌入式开发环
·ARM的嵌入式Linux移植体
相关文章
·双内核嵌入式处理器及其
·YAFFS文件系统在嵌入式L
·ARM7系统中实现CF卡存储
·嵌入式系统的人机界面原
·ARM入门
·嵌入式数据库
·基于μClinux的SoPC应用
·开源嵌入式数据库Berkel
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统