先说一下背景,我的助学计划中写的是指Helper2416上移植uC/OS,但是由于自己的粗心大意,板子寄到后才开始详细看手册,才发现S3C2416的外设和以前用过的其它ARM开发板的有较大的差异。因为我对VxWorks比较熟悉,本来的计划是将相似外设的VxWorks驱动做较小的改动就可以移植到uC/OS上的,但是发现没有相似的驱动可供移植,需要重写。
由于我对uC/OS还不是很熟悉,所以决定先在开发板上将VxWorks跑起来,这样再移植uC/OS工作量就会小一些。没想到近两个月工作的事特别多,最后只是将带串口的VxWorks跑了起来,竟然连网口都没有调完,真是汗颜。
这里先将Helper2416上VxWorks的开发心得列一下,uC/OS的待移植完毕后会补上。
移植的版本是VxWorks6.9.2,实现的驱动有
s3cIntCtlr.c Interrupt Controller
s3cTimer.c Timer
s3cSio.c UART
smscNet.c(待更新) LAN9220
其中网口驱动还没调完,等调完后会更新上来
通过这次移植,发现Samsung芯片的手册水平还是比较差的,错误和遗漏比较多。
就举一个我调试是遇到的例子,UART的UCON0寄存器的Tx Interrupt Type和Rx Interrupt Type位域,手册中只写了配1是边沿触发,我以为只能做成边沿触发。
结果调试时串口怎么改也不好用,后来改成0(应该是配成电平触发)就一切正常了。。。
另外好的外设都和市面上常见外设架构不一样,比如串口常见的ns16550和prime cell,ARM中断控制器和定时器常见的amba。外设差别较大,驱动就得重新写。虽然是几个小驱动,如果没有三星提供驱动demo,还是增加了开发成本。
中断控制器也不像其他芯片那样,一个中断上报后可以通过置一个bit将其他低优先级的中断屏蔽,而高优先级的中断还是打开。中断嵌套需要完全由软件来实现优先级屏蔽,比较麻烦,所以我现在的驱动里面也只是做了不可中断嵌套的驱动,支持中断嵌套的后续再更新吧。
附件中是我移植的BSP,是根据integrator926ejs开发板的BSP修改过来的,时间仓促,有些注释和没用的代码还没有清除干净,后面都整好了再来更新。里面的vxWorks.bin是生成的bin文件,可以在uboot下通过如下命令加载的内存中运行VxWorks
tftp 30100000 vxWorks.bin
go 30100000
注意在笔记本调试上可能需要关掉某些TFTP软件的Option negotiation选项,否则bin文件load会不完整导致运行不起来,这个小问题也费了不少时间:(
VxWorks起来后是有shell的,可以在shell中输入'i'命令查看当前运行的任务,'ti'查看对应任务信息,‘devs’查看当前设备,可以调用函数直接执行等等。
U-Boot 1.3.4 (Mar 21 2014 - 14:13:41) for SMDK2416
CPU: S3C2416@534MHz
Fclk = 534MHz, Hclk = 133MHz, Pclk = 66MHz
Board: SMDK2416 DDR2
DRAM: 64 MB
Flash: 1 MB
NAND: 256 MB
In: serial
Out: serial
Err: serial
smc911x: MAC 00:40:5c:26:0a:5b
Hit any key to stop autoboot: 0
Helper2416 #
Helper2416 # tftp 30100000 vxWorks.bin
smc911x: initializing
smc911x: detected LAN9220 controller
smc911x: phy initialized
smc911x: MAC 00:40:5c:26:0a:5b
TFTP from server 192.168.1.10; our IP address is 192.168.1.11
Filename 'vxWorks.bin'.
Load address: 0x30100000
Loading: #################################################################
##########################################################
done
Bytes transferred = 626984 (0x99128)
Helper2416 # go 30100000
## Starting application at 0x30100000 ...
Adding 3040 symbols for standalone.
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]] ]]]] ]]]]]]]]]] ]] ]]]] (R)
] ]]]]]]]]] ]]]]]] ]]]]]]]] ]] ]]]]
]] ]]]]]]] ]]]]]]]] ]]]]]] ] ]] ]]]]
]]] ]]]]] ] ]]] ] ]]]] ]]] ]]]]]]]]] ]]]] ]] ]]]] ]] ]]]]]
]]]] ]]] ]] ] ]]] ]] ]]]]] ]]]]]] ]] ]]]]]]] ]]]] ]] ]]]]
]]]]] ] ]]]] ]]]]] ]]]]]]]] ]]]] ]] ]]]] ]]]]]]] ]]]]
]]]]]] ]]]]] ]]]]]] ] ]]]]] ]]]] ]] ]]]] ]]]]]]]] ]]]]
]]]]]]] ]]]]] ] ]]]]]] ] ]]] ]]]] ]] ]]]] ]]]] ]]]] ]]]]
]]]]]]]] ]]]]] ]]] ]]]]]]] ] ]]]]]]] ]]]] ]]]] ]]]] ]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Development System
]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]] VxWorks 6.9
]]]]]]]]]]]]]]]]]]]]]]]]]] KERNEL: WIND version 2.13
]]]]]]]]]]]]]]]]]]]]]]]]] Copyright Wind River Systems, Inc., 1984-2011
CPU: ARM Integrator - ARM926E (ARM). Processor #0.
Memory Size: 0x4000000 (64Mb). BSP version 1.0/14.
Created: Jul 19 2014, 21:56:53
ED&R Policy Mode: Permanently Deployed
->
->
->
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tJobTask 30125440 301ab2a8 0 PEND 3016795c 301ab1f0 0 0
tExcTask 30124ba0 301a0a30 0 PEND 3016795c 301a0950 0 0
tLogTask logTask 302433a8 0 PEND 301662ac 3024327c 0 0
tShell0 shellTask 3025a8b8 1 READY 3016da6c 3025a5f4 0 0
tVxdbgTask 30121400 30246628 25 PEND 3016795c 3024658c 0 0
value = 0 = 0x0
->
-> ti tVxdbgTask
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tVxdbgTask 30121400 30246628 25 PEND 3016795c 3024658c 0 0
process : kernel
options : 0x1009003
VX_SUPERVISOR_MODE VX_UNBREAKABLE VX_DEALLOC_TCB VX_FP_TASK VX_DEALLOC_EXC_STACK
STACK BASE END SP SIZE HIGH MARGIN
--------- -------- -------- -------- ------- ------- -------
execution 30246628 30244628 3024658c 8192 204 7988
exception 30247820 30246874 4012 20 3992
VxWorks Events
--------------
Events Pended on : Not Pended
Received Events : 0x0
Options : N/A
r0 = 0x00000000 r1 = 0x00000000 r2 = 0x00000000
r3 = 0x00000000 r4 = 0xffffffff r5 = 0x60000013
r6 = 0x30199868 r7 = 0x301998b4 r8 = 0x00000001
r9 = 0x3019910c r10 = 0x30198ef4 r11/fp = 0x302465b8
r12/ip = 0x02000000 r13/sp = 0x3024658c r14/lr = 0x00000000
pc = 0x3016795c cpsr = 0x60000013 ttbase = 0x301ac000
coprocTaskShow: TaskId 0x30246628 has no coprocessors selected
value = 0 = 0x0
->
-> devs
drv name
0 /null
1 /tyCo/0
value = 25 = 0x19
->
-> iosDrvShow
drv creat remove open close read write ioctl
0 0 0 3012fc2c 3012fcec 0 3012fc24 3012fc64
1 30132630 0 30132630 30132688 30133290 30133178 301326dc
2 30130d18 0 30130d18 30130d6c 30130e1c 30130f34 30130fc8
3 30130cc8 0 30130cc8 30130dc0 30130eac 30130f60 301310ac
value = 20 = 0x14
->
-> l 0x30132630
30132630 e92d4800 STMDB sp!,{r11,lr}
30132634 e2822001 ADD r2,r2,#1
30132638 e1a0b000 MOV r11,r0
3013263c e5901238 LDR r1,[r0,#0x238]
30132640 e5802250 STR r2,[r0,#0x250]
30132644 e2811001 ADD r1,r1,#1
30132648 e5900298 LDR r0,[r0,#0x298]
3013264c e58b1238 STR r1,[r11,#0x238]
30132650 e3500000 CMP r0,#0
30132654 0a000009 BEQ 0x30132680
value = 0 = 0x0
->
-> l 0x30133290
tyRead:
30133290 e92d4fc0 STMDB sp!,{r6-r11,lr}
30133294 e1a0b000 MOV r11,r0
30133298 e1a0a001 MOV r10,r1
3013329c e1a07002 MOV r7,r2
301332a0 e28b0028 ADD r0,r11,#0x28
301332a4 e3e01000 MVN r1,#0
301332a8 eb00d519 BL semTake
301332ac e3500000 CMP r0,#0
301332b0 0a000003 BEQ 0x301332c4
301332b4 e3a00006 MOV r0,#6
value = 0 = 0x0
->
-> l 0x30100000
sysInit:
30100000 e59f10a0 LDR r1,0x301000a8
30100004 ee011f10 MCR p15,0x0,r1,c1,c0,#0
30100008 e3a01000 MOV r1,#0
3010000c ee071f9a MCR p15,0x0,r1,c7,c10,#4
30100010 ee071f17 MCR p15,0x0,r1,c7,c7,#0
30100014 e59f1088 LDR r1,0x301000a4
30100018 e5911000 LDR r1,[r1,#0]
3010001c ee111f10 MRC p15,0x0,r1,c1,c0,#0
30100020 e3811a01 ORR r1,r1,#0x1000
30100024 ee011f10 MCR p15,0x0,r1,c1,c0,#0
value = 0 = 0x0
->
->
欢迎大家检查指正,多提批评意见。
本文来自论坛,点击查看完整帖子内容。