Samsung S3C2440平台上的Vxworks BSP移植(3)
- UID
- 1029342
- 性别
- 男
|
Samsung S3C2440平台上的Vxworks BSP移植(3)
上面一小段代码是对ROM_BASE_ADRS 的内存映射,ROM_BASE_ADRS+0xf0000000是要映射的虚拟地址,ROM_BASE_ADRS是硬件设计时定义的实际物理地址,ROUND_UP(ROM_SIZE_TOTAL*2,PAGE_SIZE)是映射长度,VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|VM_STATE_MASK_CACHEABLE是可初始化的地址状态,VM_STATE_VALID|VM_STATE_WRITABLE_NOT|VM_STATE_CACHEABLE_NOT是实际初始化的地址状态。
若添加新的外设,该外设对应的内存空间必须在sysPhysMemDesc[]中配置。通过这样的配置就完成了内存映射和MMU的开启。
修改dm9kEnd.c
由于S3C2440使用的是DM9000网卡。要做好DM9000网卡的END驱动首先要初始化网卡的数据结构dm9kDevice,这个数据结构如下:
typedef struct dm9kDevice
{
END_OBJ endObj; /*继承类 */
int unit; /*设备单元号 */
UINT32 flags; /* 本地标志信号*/
int ivec; /* 中断向量 */
int ilevel; *中断级 */
……
} DM9K_DRV_CTRL
数据结构中的END_OBJ类型成员、网卡单元号、中断号和中断向量是网卡驱动中必须包含的成员元素。
驱动的部分接口函数,主要包括网卡加载函数dm9kEndLoad、网卡启动函数dm9kStart、停止网卡函数dm9kStop、网卡控制函数dm9kIoctl、网卡卸载函数dm9kUnload、网卡发送函数dm9kSend、获取组播地址函数dm9kMCastGet、启动轮询模式函数dm9kPollStart、关闭轮询模式函数dm9kPollStop、轮询模式发送函数dm9kPollSend、轮询模式接收函数dm9kPollRcv等,通过对这些接口函数编写功能,实现网卡驱动。
在编写驱动的过程中,还必须注意:由于目标板用一种100pin的DM9000芯片,这种芯片除了有CMD信号之外,还有6根地址片选信号SA4~SA9,根据SA4~SA9对应的CPU地址线和数据手册上引脚定义,可以计算出网卡的端口地址,如果SA4~SA9对应CPU地址的addr4~addr9,那么网卡端口基址就是0x18000300,这样可以计算出网卡的基地址。
图2 VxWorks COM1口的打印信息
BSP的调试与仿真
BSP修改完成以后,就要进行调试了,这里采用点亮LED灯的调试方法,写一段点灯程序,用BSP生成bootrom和VxWorks映像,使用H-JTAG软件将bootrom烧写进目标板的norflash中,通过在不同位置反复的调用点灯程序和烧写bootrom到norflash中来调试BSP,并通过串口查看调试信息,如图2所示,是操作系统启动过程中,经过串口传输到主机上打印的调试消息,通过这些信息可以判断出系统启动过程中哪一部分出现了问题。
图3 VxWorks Shell界面
系统上电之后,bootrom首先运行,然后通过网线将VxWorks映像文件下载进rom中,图3所示为VxWorks的Shell界面,显示设备列表有串口和网口,表明串口和网口驱动成功。 |
|
|
|
|
|