移植标准Linux到S3C2410
址,MEM_SIZE是内存的大校PAGE_OFFSET,MEM_SIZE要在/include/asm-arm/arch-s3c2410中定义。
/arch/arm/mm/mm-armv.c
此文件用于与硬件相关的内存管理,如初始化内存页表内存映射等。
将init_maps->bufferable = 0;改为 init_maps->bufferable = 1;
/arch/arm/mach-s3c2410
建立相应目录并按照处理器使用要求编写irq.c,mm.c,time.c,arch.c,Makefile,分别实现中断控制器的初始化,地址的虚实映射关系,时钟中断和实时时钟处理以及有关Ramdisk使用参数等的设置。
/include/asm-arm/arch-s3c2410
此目录下定义用到的头文件。
至此移植工作基本完成,再进行如下编译过程,即可得到我们需要的映像文件[4]。
make dep; make clean; make zImage
3 完整系统的构成
要想让linux真正跑起来,还需要根文件系统的支持,常用的方法是Ramdisk。Ramdisk 是通过将计算机的内存(RAM)模拟作设备来创建和挂装文件系统的一种驱动器机制。一般应包括以下目录内容: /dev(设备文件目录); /proc (proc 文件系统目录);/etc(系统配置文件的目录); /sbin(系统程序的目录);/bin(基本应用程序目录);/lib(共享函数库的目录);/mnt (装载其他磁盘节点的目录);/usr(附加应用程序的目录)[3]。
除此之外一个完整的嵌入式系统还要有引导代码,如vivi,u_boot等。Bootloader也需要移植与编译,在此并不详述。以上三块内容都准备好,对FLASH做好区间的划分[1]以后,便可以用 FLASH 烧写工具依次将Bootloader,内核以及根文件系统烧写到 FLASH里。然后就可以启动系统了。
系统从0 地址处开始执行Bootloader。Bootloader做完相关硬件初始化工作之后从 FLASH里把压缩的内核映象复制到SDRAM内并且把根文件系统所在地址参数传递给内核[1]。内核复制到SDRAM之后进行内核解压启动。内核启动过程中根据 Bootloader传递过来的地址参数去寻找根文件系统 , 将其加载到嵌入式系统上。这样,整个Linux被引导启动起来 , 进入正常工作状态。
4 结束语
本文作者创新点:现在采用较为普遍的2.4版本的Linux并没有包含进对S3C2410的支持,给基于此的嵌入式系统的开发带来不便。本文在了解了移植过程中普遍存在的问题和作者经验教训积累的基础上,详尽分析了如何将Linux2.4移植到ARM平台的嵌入式系统上的主要技术,使得该系统可以很好的支持目标平台,并且移植后的Linux 很好的保留了原有的工作稳定的特点。在移植过程中强调其原理与可操作性,对加深对于Linux内核的理解和开发嵌入式系统是十分重要的,对于开发其他嵌入式系统具有参考意义。
参考文献 ( References)
[1]刘晶晶,基于ARM-Linux嵌入式系统引导程序的设计[J],微计算机信息,2006,2-2:123-125
[2]李明,ARM Linux 的移植过程及分析,电子设计应用[J],2003,7:55-57
[3]徐虹等,操作系统实验指导[M],北京:清华大学出版社,2002,5
[4]张杰,曹卫华,吴敏,施卫强,基于S3C2410的Linux移植[J],微机发展, 2005(15),6:142-144
[5]孙天泽,袁文菊,张海峰,嵌入式设计及Linux驱动开发指南[M],北京:电子工业出版社,2005,9
[6]Wookey and Tak-Shing,Porting the Linux Kernel to a New ARM Platform,SOLUTIONS JOURNAL,2002,4:52-57
- 基于s3c2410的CramFS根文件系统的移植(07-13)
- AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现(11-06)
- 基于WinCE的ARM视频监控系统(11-14)
- 基于WinCE的I2C驱动程序设计(04-24)
- WinCE下光电编码器的驱动程序设计(04-12)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)