关键词不能为空

当前您在: 主页 > 英语 >

ARM的嵌入式Linux移植体验之操作系统.

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-27 21:41
tags:

-

2021年2月27日发(作者:handsome)


ARM


的嵌入式


Linux

移植体验之操作系统



在笔者撰写的《



C


语言嵌入式系统编程修炼之道




一文中,


主要陈诉的软件架构是单任务无 操作系统平台的,


而本文的侧重点则在于讲述操


作系统嵌入的软 件架构,二者的区别如下图:






嵌入式操作系统并不总是必须的,


因 为程序完全可以在裸板上运行。


尽管如此,


但对于


复杂的系统,为使其具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统

< p>
管理、


消息管理、队列管理和中断处理的能力,提供多任务处理,


更好的分配系统资源的功


能,很有必要针对特定的



硬件



平台和实际应用移植操作系 统。鉴于


Linux


的源代码开放性,它成为嵌入式操作系统领 域


的很好选择。国内外许多知名大学、公司、研究机构都加入了嵌入式

< br>Linux


的研究行列,


推出了一些著名的版本:





·


RT-Linux


提供了一个精巧的 实时内核,把标准的


Linux


核心作为实时核心的一个进


程同用户的实时进程一起调度。


RT-Linux

< br>已成功地应用于航天飞机的空间数据采集、科学


仪器测控和电影特技图像处理等广 泛的应用领域。如


NASA(


美国国家宇航局

< br>)


将装有


RT-Linux


的设 备放在飞机上,以测量


Georage


咫风的风速;

< p>




·


uCLinux



Micro-Control-Li nux



u


表示


Micro



C


表示


Control



去掉了


MM U


(内


存管理)功能,应用于没有虚拟内存管理的微处理器


/


微控制器,它已经被成功地移植到了


很多 平台上。





本章涉及的


mizi-linux


由韩 国


mizi


公司根据


Linux


2.4


内核移植而来,支持


S3C2410 A


处理器。






内核要点





和其他操作系统一样,

< p>
Linux


包含进程调度与进程间通信


(IPC)


、内存管理


(MMU)


、虚

< p>
拟文件系统


(VFS)


、网络接口等,下图给出了


Linux


的组成及其关系:






Linux


内核源代码包括多个目录:






1



arch


:包括硬件特定的内核代码,如


arm



mips


i386


等;






2



drivers


:包含硬件



驱动



代码,如


char



cdrom



scsi



mtd

< br>等;





3



include

< p>
:通用头文件及针对不同平台特定的头文件,如


asm-i386



asm-arm


等;






4



init


:内核初始化代码;

< p>





5



ipc


:进程间通信代码 ;





(< /p>


6



kernel


:内核核心代码;




< p>


7



mm


:内存管理代码;




< /p>



8



net< /p>


:与网络协议栈相关的代码,如


ipv4



ipv6



ethernet


等;






9



fs

< p>
:文件系统相关代码,如


nfs



vfat


等;






10


)< /p>


lib


:库文件,与平台无关的


strl en



strcpy


等,如在


string.c


中包含:



char * strcpy(char * dest,const char *src)


{


char *tmp = dest;



while ((*dest++ = *src++) != '')


/* nothing */;


return tmp;


}



11



Documentation


:文档





Linux


内核的实现中,有一些数据结构使用非常频繁,对研读内核的人来说至为 关


键,它们是:






_struct




Linux


内核利用


task_struct


数据结构代表一个进程,用


task_struct


指针形成一个


task


数组。当建立新进程的时候,


Linux


为新的进程分配一个


task_struct


结构, 然后将


指针保存在


task


数组中。调 度程序维护


current


指针,它指向当前正在运行的进程。





_struct













mm_struct


< p>















vm- area_struct


结构的指针,


vm- area_struct


结构描述了虚拟内存的一个区域。








Linux


虚拟文件系统中的文件、 目录等均由对应的索引节点


(inode)


代表。






移植项目






mizi- linux


已经根据


Linux


2. 4


内核针对


S3C2410A


这一芯片 进行了有针对性的移


植工作,包括:






1


)修改 根目录下的


Makefile


文件





a.


指定 目标平台为


ARM




#ARCH


:=


$$(shell


uname


-m


|


sed


-e


s/i.86/i386/


-e


s/sun4u/sparc64/


-e


s/arm.*/arm/ -e s/sa110/arm/)


ARCH := arm




b.


指定交叉编译器:



CROSS_COMPILE = arm-linux-





2


)修改


arch


目录中的文件





根据本章第一节可知,

< p>
Linux



arch


目 录存放硬件相关的内核代码,因此,在


Linux


内核中增加对


S3C2410


的支持,最主要就是要修改

arch


目录中的文件。





a.



ar ch/arm/Makefile


文件中加入:



ifeq ($$(CONFIG_ARCH_S3C2410),y)


TEXTADDR = 0xC0008000


MACHINE = s3c2410


Endif




b.


在< /p>



文件中加入:



if [


comment 'S3C2410 Implementation'


dep_bool


'


SMDK


(MERI


TECH


BOARD)'


CONFIG_S3C2410_SMDK


$$CONFIG_ARCH_S3C2410


dep_bool ' change AIJI' CONFIG_SMDK_AIJI


dep_tristate


'S3C2410


USB


function


support'


CONFIG_S3C2410_USB


$$CONFIG_ARCH_S3C2100


dep_tristate


'


Support


for


S3C2410


USB


character


device


emulation'


CONFIG_S3C2410_USB_CHAR $$CONFIG_S3C2410_USB


fi # /* CONFIG_ARCH_S3C2410 */





文件还有几处针对


S3C2410

< p>
的修改。





c.



arch/arm/boot/Make file


文件中加入:



ifeq ($$(CONFIG_ARCH_S3C2410),y)


ZTEXTADDR = 0


x3



0008000


ZRELADDR = 0x30008000


endif




d.


在< /p>


linux/arch/arm/boot/compressed/Makefile< /p>


文件中加入:



ifeq ($$(CONFIG_ARCH_S3C2410),y)


OBJS += head-s3c2410.o


endif




加入的结果是


head-s3c24 10.S


文件被编译为


head-s3c2410.o






e.


加入


archarmbootcompress ed head-s3c2410.S


文件



#include



#include



#include



.section


__S3C2410_start:


@ Preserve r8/r7 i.e. kernel entry values


@ What is it?


@ Nandy


@ Data cache, Intstruction cache, MMU might be active.


@ Be sure to flush kernel binary out of the cache,


@ whatever state it is, before it is turned off.


@ This is done by fetching through currently executed


@ memory to be sure we hit the same cache


bic r2, pc, #0x1f


add r3, r2, #0x4000 @ 16 kb is quite enough...


1: ldr r0, [r2], #32


teq r2, r3


bne 1b


mcr p15, 0, r0, c7, c10, 4 @ drain WB


mcr p15, 0, r0, c7, c7, 0 @ flush I & D caches


#if 0


@ disabling MMU and caches


mrc p15, 0, r0, c1, c0, 0 @ read control register


bic r0, r0, #0x05 @ disable D cache and MMU


bic r0, r0, #1000 @ disable I cache


mcr p15, 0, r0, c1, c0, 0


#endif


/*


* Pause for a short time so that we give enough time


* for the host to start a terminal up.


*/


mov r0, #0x00200000


1: subs r0, r0, #1


bne 1b



< br>该文件中的汇编代码完成


S3C2410


特定硬件相关的 初始化。




f.



archarmdef- configs


目录中增加配置文件





g.



ar charmkernelMakefile


中增加对


S3C24 10


的支持



no-irq-arch := $$(CONFIG_ARCH_INTEGRATOR) $$(CONFIG_ARCH_CLPS711X)



$$(CONFIG_FOOTBRIDGE) $$(CONFIG_ARCH_EBSA110)



$$(CONFIG_ARCH_SA1100) $$(CONFIG_ARCH_CAMELOT)



$$(CONFIG_ARCH_S3C2400) $$(CONFIG_ARCH_S3C2410)



$$(CONFIG_ARCH_MX1ADS) $$(CONFIG_ARCH_PXA)


obj-$$(CONFIG_MIZI) += event.o


obj-$$(CONFIG_APM) += apm2.o




h.


修< /p>



arch/arm/kernel/debug-armv.S

















S3C2410


的代码:



#elif defined(CONFIG_ARCH_S3C2410)


.macro addruart,rx


mrc p15, 0, rx, c1, c0


tst rx, #1 @ MMU enabled ?


moveq rx, #0x50000000 @ physical base address


movne rx, #0xf0000000 @ virtual address


.endm


.macro senduart,rd,rx


str rd, [rx, #0x20] @ UTXH

-


-


-


-


-


-


-


-



本文更新与2021-02-27 21:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/676232.html

ARM的嵌入式Linux移植体验之操作系统.的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文