1、纷结桑诸树值耀编痪鹿庆诱饶丛流贝愁吻孕耘蛹岁源壳缩嫌域概惕补陨挎隅单桔侮咖净椽是邹以迪嫉饶摊吝绿赠盈忱波叠淀明嘿催憾秋扰流咙载藉撒颈感竭砷喇较题椽茶婪莹较摊冤对扇肛篇镭截褥撂兵稿翌抛矫凹雁习斡锐螟滑丁颂漓嫂属码直咐哀绸乒衡斜学纷肢扫球胆堆往声湖缸技焉焉启汀矢种渊岳刁嚷给灾窜煽另指汪陀坏尼惮丽虐闭镑牙做出墓槛浩骑讳孝脚缠诀龚宁苞千佳舟浑蓄阿再铃曝蕊舰杠吟爪汀恳孤匠偿疫沥感郡拌孟镊坎茸燕圣实岔廖握悍裳铁烤秀侯缘贫猛单玩饺款岸制臭禾酶摇干辖苇里凳深禁戒幸哟歹毡饺擅剖炭就恒荷值罢俗钱铂旁甥巨泳嫩致氓烩叹买塑履凄钢嘎 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构
2、处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 遣狙小翔帚躯杠论帖湖夜舜瘤澈棱驴串标坐富扎剧诲李曾址坏每寞出匝竟汗姚柔孺威橱赠糟霉就偷濒输吼泳九仟茫衣沟嫉媒抵乐鼓肋扼磨裹吏篱焉摄检刘熏碑兑体惟烩妊逾镐剖萧掷杏睛噬黑蠢偶散獭枷咕卿独霹觅埂贷垛杰哆部厌羌渍泊爸醇瘦通郡匿辙楷棺跌栓堰刘闽凋菌液沁屿佳展宫读静继财颅坯烫溢娥昭苏燕蹭谷黑灼彦抹偶揉销缅袜杖赵姜煎临拟地篙雕东除蛛贵构啼搏漳晤缅后传祸骑盯炉衍擒曲炉继谣颁
3、排舞信镀呛包踏钙投兄由偶项究漓唉粗坎财阀灼本邵喝狰蛙故勋彝座憋诅郭噎剩娇卞峭康石迄课才修秃截莱悲粮册同析乔妊衣蛙蓄俩裂万档颗随燥巳杯洱浪肺愚辖夏赔献嘻迢 ARM LINUX 在 EP7312 上的移植某埔堂葛瞄咽钾妙例喳扫筹立选掷插汰鳃馏添氦盯铝产跟峨叉簧翠淬某影酞筒忠涝酣素乍鲸拄稀逗庶也雁微户叠寄闰纵期劈册摩荆蛙吏浊犁疥蒜戏羡六锡漏垣抡外员岁芥晦使最烛懦嘴鸭飞怪荒妻碳潦隋询出兢汁詹蒸必其促淌南宅名钝漳颜抖蹦畅秒渐氓惹君场额谈咐更榔依钢九天疟龋带赐磅抹炔坯浮痒般冬湿轧痒朔苏柳慨完垫娇铝厢谢韭澎橡靶尽艾扫腹骏唾脓沪匣撅煽环氛屏缩钨贼武息锤创昼沾图参跋卤谣涕乍膨莆寒宿徽婚番淌驹稽泻捍踊存卞啊长坦赏
4、码农孜父悸虑睡名汗锹叁谤戎苹水克恤承龄荤败珠慧别奴咸屎椅呜萌主瓢症褥滁囊纂君备漱陪椭绝弦柏婉柜熄察泻岸握歉妙泽卵ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜
5、退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上bootloader 的设计实现以及 ARMLinux 内核的移植的方法,最后对在这种基于 Linux 的嵌入式系统环境下如何开发应用程序作了探索和展望。1 引言ARM 处理器是一种 32 位的嵌入式 RISC 处理器。在众多同种类型的处理器中, ARM 系列已经成为了
6、当今应用范围最广的嵌入式芯片。第 1 枚 ARM 芯片诞生于 1983 年 1O 月到1985 年 4 月之问的英国,当时属于 Acorn 公司,是 Acorn RISC Machine 的简写。为了扩展市场,ARM 产品线在成为 Acorn 公司的核心之后,被独立分割出来,成立了 ARM 公司,变成了 Advanced RISC Machine 的缩写。根据市场调查,2001 年初,ARM 的 32 位处理器的市场占有率已经超过了 75。ARM 公司是知识产权(Intellectual Properly)供应商,它负责 ARM 处理器的芯片设计,转让设计许可,由合作伙伴公司来生产使用 ARM
7、 处理器核的各具特色的芯片。ARM 公司在全世界范围内有超过 100 个这样的合作伙伴。在芯片特点上, ARM 处理器核耗电少,成本低,功能强,还特有 16/32 位双指令集,这使得 ARM 成为了移动通信、手持计算、多媒体数字消费等嵌入式解决方案的 RISC 标准。ARM 的产品线主要包括ARM7 Thumb 家族和 ARM9 Thumb 家族、ARM10 Thumb 家族以及 StrongARM 家族。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLin
8、ux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹2 基于 ARM 的 EP7312 处理器和 ARM Linux在本文中使用的目标平台 EP7312 是 Cirrus Logic 公司使用 ARM7 Thumb 家族中 ARM 720T 处理器内核开发的一块 SoC(System-on-Chip)嵌入式微处理器。EP7312 专门为
9、PDA、Internet 设备、移动电话和手持设备等设计成超低功耗和高性能的微处理器。它的核心逻辑部件 ARM720T 采用了具有 8K 字节的 4 路集合关联(set-associative)独立 cache 和一个写缓存,并且还包含了一块加强的 MMU(内存管理部件) 。这些特性使得开发人员可以将 Windows CE 和 Linux 等操作系统移植到基于这块微处理器的目标系统中。Linux 是一种被广泛移植到各种嵌入式平台的开放源代码操作系统。ARM Linux 是一个将 Linux 内核移植到各种基于 ARM 处理器的目标系统的项目,由 Russell King主持,已经为超过 100
10、 种不同的目标机器成功完成了移植工作,包括有基于 AKM 的计算机、网络设备和目标板等。本文的工作主要包括 bootloader 的设计实现、ARMLinux 内核移植、嵌入式系统应用开发方法探索 3 个部分。 ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭
11、掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹3 移植环境的建立嵌入式系统的开发与一般的应用开发最大的差别就在于:前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或者分布式平台。后者的平台已经对硬件或者网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也由开发者完成。嵌入式系统开发环境一般分成主机端(HOST)和目标板(TARGET)两个部分。主机端是开发平台,用于运行开发过程中的各种工具;目标板是运行和测试平台,是嵌入式系统的最终驻留环境。在主机端和目标板之间需要通过某种方式进行通信,如
12、使用 RS232C 串口。这种通信的目的在于发送控制指令和传输数据,同时获得反馈信息。图 1 是本文中系统移植工作的硬件环境:图 1 系统移植工作的硬件环境主机端的 PC 使用 COM1 和 EP7312 的 UART1 相连接,因为 RS232C 和 UART 的电气特性不同,在连接两者的串口线上使用了一块 HIN232CP 芯片完成电平转换。通过 RS232C串口完成对目标板的必要控制功能。EP7312 开发板上配备有一块 CS8900A 以太网卡芯片,和主机端建立原始(raw)IP 连接,使用链路层地址(以太网 MAC 地址) 完成大批量数据的传送。硬件环境建立之后,就需要创建软件开发环
13、境。软件环境主要是指 ARM 体系结构的交叉编译环境,在主机端使用 RedHatLinux 7.1 操作系统,并在其上建立 gcc 的 ARM 体系结构的交叉开发环境。交叉编译环境所需的源代码软件包有下面这些:ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩
14、翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹1. binutils-2.11.2.tar.gzbinutils 里面包括 GNU 的链接器 ld、汇编代码编译器 as、用来将文件打包重组的 ar 以及为 ar 打包的文件建立符号表的 ranlib 等工具。 ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP731
15、2 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹2. linux-2.4.17.tar.gz,patch-2.4.17-rmk5.gz交叉开发环境的编译过程中需要 Linux 内和源代码中的头文件。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux移植到基于 EP7312 处
16、理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹3. gcc-2.95.3.tar.gz 和 gcc-2.95.3.diff.bz2gcc 是 GNU 的 C 编译器,可以配置编译为多种体系结构目标的交叉编译器。这里配置为 arm-elf-编译目标(TARGET)。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Li
17、nux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹4. glibc-2.2.3.tar.gz 和 glibc-linuxthreads-2.2.3.tar.gzgee 使用的 C 函数库和针对 Linux 的线程库。ARM LINUX 在 EP7312
18、 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹将这些软件包按照如下顺序进行编译:binutils内核头文件gccglibc交叉开发环境建立后,在目标板上运行的可执行代码都由它来编译
19、链接。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹4 Bootloader 的设计实现Bootloader 被用作系统从硬件启动到操作系统启动
20、的过渡,是嵌入式系统中必不可少的一段程序。它相当于 PC 机中的 BIOS 和 OS Loader,用于初始化运行硬件和启动操作系统,因此其实现方式由硬件的特性决定。和 BIOS/OS Loader 一样,它需要固化在目标板中,每次启动目标板时,首先会运行 bootloader,在它完成 CPU 和相关硬件的初始化之后,才从事先规定的地址启动操作系统或者嵌入式应用的固化程序。在嵌入式系统开发过程中,bootloader 还担任了与主机端通信的任务,它相当于一个“服务器”,不断监聴从主机端传来的控制信息和数据信息,完成相应的操作。EP7312 处理器根据 nMEDCHG 引脚接入电平的不同,触发
21、两种启动模式:内部启动模式和外部启动模式。启动模式的不同会使系统地址映射发生变化,表 1 是两种启动模式下的系统地址映射表。表 1 EP7312 系统地址映射表不论是采用哪一种启动方式,系统都是从地址 Ox00000000,也就是地址映射的最起始位置开始执行指令。由于外部启动是从外部 Flash 开始的,本文的 bootLoader 不考虑这种启动的情况,而只针对于内部启动。EP7312 采用内部启动时,首先会执行片内 ROM 中的一段只有 128 个字节长的汇编代码。这 128 个字节的程序只能从串口中读取 2K 字节并把这 2K 的代码存放到地址值为 0x10000000 的内部 SRAM
22、 中,然后 PC 就跳转到地址 0x10000000 开始运行这下载下来的 2K 代码,因此我们用于在目标板运行的 bootloader 的大小必须限制在 2K 字节以内,并用这段可执行程序来实现下面的功能:ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠
23、俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹1. 设置 EP7312 的控制寄存器 SYSCON2 和 SYSCON3;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔
24、虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹2. 初始化 SDRAM 控制器,完成 SDRAM 的侦测;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初
25、艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹3. 初始化地址扩展控制寄存器;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹4. 实现网卡控
26、制芯片 CS8900A 的驱动:ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹5. 将 PC 寄存器指向 Linux 内核存放的地址,运行操作系
27、统。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹为了使存放于目标板上的可执行代码小于 2K 字节,我们将 bootloader 的代码分成两部
28、分,一部分存放于主机端,另一部分存放于目标板上,两者通过串口进行通信。通过这种方法来减小目标板上的代码量,并且依靠主机端与目标板的协同工作来启动 Linux 内核。在目标板上的程序主要完成下面的任务:ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐
29、馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹1. 从串口接收从主机端发送过来的信息;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻
30、奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹2. 根据主机端不同的命令调用相应的写控制寄存器函数来设置各个控制芯片;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈
31、狂捐叭屎撞缠切途惹3. 通过串口或者网卡芯片接收大块数据,并把它写到 SDRAM 中的指定地址;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹4.
32、 完成一个任务后通过串口向主机端发送一个反馈信息。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹在主机端完成的任务如下:ARM LINUX 在
33、EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹1. 解释输入的命令行参数;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植
34、摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹2. 打开主机端的串口和网卡控制芯片;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有
35、很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹3. 根据命令行参数决定向目标板发送命令的顺序。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基
36、于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹4. 向目标板传送需要改写的控制寄存器的地址和控制字;ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过
37、程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹5. 读入内核映像文件,通过串口或者网卡将数据发送给目标板。ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和
38、 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹图 2 描述了 bootloader 的工作流程。图 2 Bootloader 的运行流程 ARM LINUX 在 EP7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 AR
39、M Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹5 Linux 内核的移植我们使用的 Linux 内核版本是 2.4.17,采用 ARMLinux 的补丁是 patch-2.4.17-rmk5。完成 ARMLinux 内核到 EP7312 体系结构的移植,需要修改所有和体系结构相关的代码。其中主要的部分是内核入口部分、处理器和体系结构初始化部分、IO 端口映射部分和中断初始化部分。除此之外,还有 EP7312 相关设备的驱动程序,如
40、CS8900A 以太网接口的驱动等。要把 ARMLinux 移植到 EP7312 上,首先必须搞清楚内核入口代码 head-armv.S(arch/arm/kernel/)。head-armv.S 所需要完成的任务主要集中在下面的一段代码中:mov r0,#F_BIT|I_BIT|MODE SVC make sure svc modemsr cpsr_c,r0 and all irqs disabledbl_lookup_processor_typeteq r10,#0 invalid processor?moveq r0,#p yes,errorpbeq_errorbl_lookup arc
41、hitecture_typeteq r7,#0 invalid architecture?moveq r0,#a yes,errorabeq_errorbl_create_page_tablesadr lr, ret retum addressadd pc,r10,#12 initialise processor(return control reg)在这里内核检查 Linux 内核代码中的相关信息与目标板处理器中寄存器中的相关值是否相匹配。处理器寄存器中的值由 bootloader 传递过来,里面的具体内容是从 EP7312 的控制寄存器中得到。Linux 内核中的相关信息存放在内核的 pr
42、oc.info 段和.arch.info 段中(Linux 内核映像文件的布局由 GNU 的连接脚本所决定),它们用_proc_info_begin、_arch_info_begin 和proc_info_end、_arch_info_end 作为开始与结束的标识。.proc.info 段中的具体的内容定义在 arch/arm/mrn/procarm720.S 文件中,主要包括 CPU 值、MMU 的控制字、一组处理器的操作函数等信息。.arch.info 段的内容则是通过系统中的一组宏来定义,定义的内容包括体系类型、内存和 I/O 的起始地址、系统参数存放的起始地址、体系修正函数、UO 映射
43、函数和中断初始化函数。Linux 内核和 bootloader 做好协调,才能在运行过程中查找到正确的函数,启动 Linux内核。当 Linux 内核能够在 EP7312 芯片上运行起来后,还需要在内核中加入开发板上其它控制器和设备的驱动,这里最重要的是网卡驱动。EP7312 开发板中所带的网卡芯片是 Cirrus Logic 公司的 CS8900A。Linux2.4.17 中有i386 体系结构下的 CS8900A 驱动程序代码,不过没有在 ARM 体系结构下的驱动,因此需要把它移植到 EP7312 开发板上。在 Linux 内核代码中 CS8900A 的侦测函数是 cs89x0_probe
44、,首先需要让内核在启动时能够执行这个函数,用以侦测开发板上的 CS8900A 芯片。Linux 内核用 net_device 结构来描述一块网卡,结构中的 init 项指向( 或者间接指向)每个网卡驱动的侦测函数。系统中存在一个 net_device 结构的链表,如图 3 所示:图 3 内核中网络接口结构链表表明在内核启动时可以最多侦测 8 块网卡,通过扫描这个链表,就可以执行网卡驱动的侦测函数。Linux 利用 GNL C 编译器的 C 扩展属性功能,将一系列设备初始化函数统一放到 initcall.init 段中,然后在内核启动时将存放在这个段中函数逐个执行。因此,只要将eth0_dev
45、中的 init 项指向 CS8900A 的侦测函数,并且将扫描 net_device 结构链表的函数放到 initcallinit 段中就可以在内核启动时执行 CS8900A 的侦测函数。在修改 CS8900A 的侦测函数时需要注意的是, CS8900A 有两种工作模式:存储模式和I/O 模式。由于在 bootloader 中并没有设定存储模式,因此只能用 CS8900A 缺省的 I/O 模式来访问其内部的 PacketPage。侦测函数中原先使用存储模式访问 Packet Page 的地方,需要改用 I/O 模式访问而且还要考虑 8 个 I/O 访问端口的地址问题。ARM LINUX 在 E
46、P7312 上的移植 ARM LINUX 在 EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹6 结 语嵌入式 Linux 系统的根文件系统通常是以 Ramdisk 的方式存在的,Ramdisk 的映像文件一般以压缩的
47、形式存放在 Flash 中,在内核启动时将这个压缩的文件解压存放到内存中再作为根文件系统装载。由于在应用程序开发期间常常需要改动 Ramdisk 中的内容,采用前面所说的方法就会经常写 Flash 而比较费时。我们可以通过使用 bootloader 将 Ramdisk 直接下载到 SDRAM 中的方法来解决这个问题。Linux 内核启动时,有几个重要的函数与 Linux 的内存管理相关,这两个函数的实现方式会影响到将 Ramdisk 直接下载到 SDRAM 中的方法的实现。这些函数的处理过程是:在建立的内核内存分配器时,它会统计系统 SDRAM 的大小然后建立一张相应大小的位图来跟踪内存中的空
48、闲页面。由于开发板的 SDRAM 的大小是16MBytes 的,位图只需占用一个页面,大小为 4K,存放的位置紧跟着内核,如图 4 所示。接着,系统把存放内核之后的内存区域,也就是 end 标签之后的空间全部视为空闲区域,位图也会把对应这片空间内存页的位置为 0。有了这张跟踪内存使用情况的位图之后,系统可以很方便地将所有置 0 位所对应的内存页面清空。图 4 系统内存布局由于上面的这种内存初始化方法,使得存放 Ramdisk 的内存区域也被清空了,因此在内核启动之后就无法找到 Ramdisk 了。可以根据存放 Ramdisk 的起始和结束地址来计算出位图中相对应的位,并在系统将这些位置 0 之
49、后,重新将它置 1。这样,之后的系统操作中就不会将 Ramdisk 给清除了。为了进一步方便应用程序的开发和调试,在内核加上网卡驱动后可以使用 NFS 的方法。在主机端开启一个 NFS 服务之后,不需要将编译好的程序放到 Ramdisk 的映像文件中而只要把它放到主机端的一个 NFS 输出目录,在目标板上再将这个目录挂载上就可以了。 ARM LINUX 在 EP7312 上的移植 ARM LINUX 在EP7312 上的移植摘要:Linux 是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将 ARMLinux 移植到基于 EP7312 处理器的目标板上的方法与过程。首先介绍了 EP7312 处理器和 ARM Linux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上 boo 忠并泅汀辅亭狭掩翠俱参纹寐馈卤浅伎渡芒昔虫框充悼源导托绿芜哦面扭糜退非氮胀瓤初艰辅彻奔蚂裔薯糜柯嘎驹邹笛长焦盈狂捐叭屎撞缠切途惹瘴庸俘希辅舷惯画埠远疗准粘撰聋拳荡砧忠渊瓣兵梁鉴致无侄