linux device driver study(chapter2)

User space and Kernel space
Unix transfers execution from user space to kernel space whenever an application
issues a system call or is suspended by a hardware interrupt. Kernel code executing
a system call is working in the context of a process — it operates on behalf of
the calling process and is able to access data in the process’s address space
. Code
that handles interrupts, on the other hand, is asynchronous with respect to processes
and is not related to any particular process.

Concurrency in the Kernel
(1)kernel code must be reentrant
source of concurrency in kernel - device interrupt , mutiple process , several sortware abstract layer in kernel(such as timer)."that mean if you modify some global date , you must first lock then modify? and "protect your static code when other call your driver interface."

one common mistake was to assume concurrence not a problem as segment code does not go to sleep. "2.6 and 2.4 big different here",mean 2.4 will not be preempted by other until timer(scheduler?) or be blocked(access resource?)



Compiling and Loading
MODULE to define a modue
__KERNEL__ preprocessor to include some data struct which defined in kernel include file
inline vs -O
link -r =>relocable

Use Resources
memory can be obtained by kmalloc and release by kfree.
i/o memory ,port,interrupt has a role - to use it must first to require in order to ensure it was not used by elsewhere.

I/O Port and I/O Memory
proc/ioport,iomem

(x86 has seperate io/mem space ,while arm has a unify)
x86 - io-mapped, risc like arm m68k powerpc - io-mapped

check_region is available to arm and other system?
good web: http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=341384&Search=true&Forum=All_Forums&Words=iomem&Match=Entire%20Phrase&Searchpage=0&Limit=25&Old=allposts&Main=341381

posted on 2005-02-04 16:24  embed  阅读(850)  评论(0编辑  收藏  举报

导航