作者JohnLinq (林约翰)
看板LinuxDev
标题Re: [问题] ARM板 RS232互传问题请教~
时间Fri Jan 9 09:15:22 2009
※ 引述《JohnLinq (林约翰)》之铭言:
: ※ 引述《a910937 (skura)》之铭言:
: 你是在Linux kernel里面作编程吗?
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 61.221.140.178
: → TroyLee:不同家出的 ARM 的 Register 不一定是一样的喔~ 12/18 14:43
: 推 a910937:我不是在kernel下的,我的是s3c2410的版子 12/25 14:27
: → JohnLinq:那你的板子上面是跑Linux吗? 12/29 13:27
: → JohnLinq:如果是跑Linux,你的程式又不在Kernel里面 12/29 13:28
: → JohnLinq:那你是怎麽存取Register的? 12/29 13:29
: 推 a910937:我的是LINUX系统,s3c2410规格里面有写到有UART有fifo暂存 01/07 15:38
: → a910937:他写UART各有16byte FIFOs,这样应该可以储存资料吧??^^" 01/07 15:40
我对这些东西也不是很懂啦,
我简单说明一下,以求抛砖引玉。
请参考:
http://www.jollen.org/blog/2006/12/linux_device_driver_io_3.html
[开始转录]
Linux 驱动程式的 I/O, : kernel-space 与 user-space 的「I/O」
^^^^^^^^^^^^^^^^^^^^^^^^^^
任何作业系统底下的「驱动程式」,都需要分二个层面来讨论所谓的「I/O 处理」:
1. 实体层:驱动程式 v.s. 硬体。
2. 虚拟层:驱动程式 v.s. user process
1. 驱动程式与 user process 的 I/O;等於
2. 驱动程式与 user process 间的 data communication;等於
3. kernel-space 与 user-space 间的 data communication。
1. user-space 无法「直接」存取 kernel-space 的记忆体。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2. 「Linux device driver」与「user-space」间的 I/O 会与 fops->read、
fops->write 与 fops->ioctl 共三个 system call 有关。
[转录结束]
你写的是user process,无法直接存取硬体。
(无法直接存取UART相关的位址/暂存器)
(这是一种作业系统所提供的保护机制)
当然,我听说.近几年.有一些User-Space的driver出现,
这些User-Space-driver主要是用在'XWindow显示驱动'以及'USB-Device'。
另外,UART硬体上的16bytes FIFO,不是给软体使用的,那是硬体本身的缓冲。
你可以改用无需作业系统的方式,来使用你的S3C2410,
用KEIL-C之类的工具来开发你的软体,不要透过Linux。 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.221.140.178
1F:推 a910937:谢谢您,原来这就是我一直无法控制UART暂存器的主因@@ 01/11 17:17
2F:→ a910937:我会再想办法看能否用read write方式来读写资料,谢谢您^^ 01/11 17:18