 
- UID
- 872238
|

Sl811hs芯片市场唯一既能用作Host模式又能用作Slave模式的具有标准微处理器总线接口USB控制芯片,它适合于非PC设备。在 Host模式下,它支持嵌入式主机与USB外围设备的通信,在Slave模式下,可以作为主机的一个外设。本系统主要用来实现对s3c4510 usb主接口的扩展,从而实现与usb接口无线网卡的互连。该芯片的内部寄存器和内存缓冲区的空间为00H-ffH,为了避免和芯片内部的内存区域冲突,和A0相连的地址线应该大于这个区域,在这里是和ADDR12相连的。当向SL811HS发数据时,先将ADDR12置低点平,使得SL811HS工作在地址周期,此时写入的数值代表地址,即:以后向内存写数据的开始地址;将ADDR12置高电平,则SL811HS工作在地址周期,此时写入的是数据,而数据的存贮的地址就是刚才在地址周期写入的数值。当连续写数据时,地址则采用自动增量模式。举例如下:
在地址周期(A0=0)向SL811HS写入0x10
在数据周期(A0=1)向SL811HS 写入0x55 即:在地址0x10写入数据0x55
在数据周期(A0=1)向SL811HS 写入0xaa 即:在地址0x11写入数据0xaa
在数据周期(A0=1)向SL811HS 写入0xbb 即:在地址0x12写入数据0xbb
2 软件实现
uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(MMU)的微处理器/微控制器。没有MMU支持是 uClinux与主流Linux的基本差异。标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟-物理地址转换映射,支持不同任务之间的保护。对uCLinux来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术。uCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上uCLinux采用实存储器管理策略。uCLinux系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。对于一个嵌入式系统而言,其结构组成如下图所示:
2.2 uClinux在s3c4510b上的实现
将uClinux移植到s3c4510的硬件平台上,主要分为四个步骤:首先是准备工作,包括下载源码,建立交叉编译环境;其次针对s3c4510的硬件平台对源码进行修改;然后配置和编译内核;最后是下载、调试内核并添加自己的驱动和应用程序。
在移植内核前首先下载uClinux源码和交叉编译工具,在宿主机上建立ARM的交叉编译环境,主要用的开发工具包括:arm-elf- binutils、arm-elf-gcc、arm-elf-gdb、genromfs。其中binutils是二进制文件的处理工具,主要包含了一些辅助开发工具,例如objdump 显示反汇编码、nm列出符号表、readelf显示elf文件信息和段信息、strip将不必要的代码去掉以减少可执行文件大小等;gcc是用来编译内核代码的工具,使用它可以编译汇编语言和c语言的程序,生成arm的代码;gdb是调试工具;genromfs是用来产生romfs文件系统。
从网站上下载的uClinux源码并不能满足我们特定硬件的要求,必须对其进行几个方面的修改:首先根据cpu重写某些与之紧密相关的汇编程序,例如 head.s,entry-armv.s等;其次根据目标cpu重新定义与之紧密相关的头文件和一些宏定义。如hardware..h, io.h等等,然后最重要的工作就是决定系统内核各个组成模块在RAM或者ROM中的地址。init,data,bss和text是由编译连接时定位文件 vmlinux.lds决定的。在这个文件中定义了各个段的起始地址,而romfs文件系统的地址是在blkmem.c文件中给出的;最后,得到的内核并不能满足嵌入式系统的需要,还要对内核进行裁减,裁减的过程一般主要就是去掉链接时不用的驱动,修改链接文件,romfs的链接位置以及配置romfs中的应用程序。 |
|