About the UART'S lock

When more than one minicom try to connect the /dev/ttyS0, an error “Device /dev/ttyS0 is locked” will be threw out.

 

How to implement this lock?

 

In fact, the UART’s lock is not managed by Kernel, and is done by user program. The analysis is shown as below.

 

If “minicom” uses the /dev/ttyS0, a lock of LCK..TTYS0 is created by minicom. The following is on my PC:

 

hfli@msh-pc1935:~/temp$ ls -l /var/lock/

total 4

drwxr-xr-x 2 www-data root     40 May  7 11:31 apache2

-rw-r--r-- 1 hfli     hfli     11 May  7 14:25 LCK..ttyS0

drwxr-xr-x 2 whoopsie whoopsie 60 May  7 11:31 whoopsie

 

The content of lock file is defined by program. In LCK..TTYS0, the content is the process number.

 

hfli@msh-pc1935:~/temp$ cat /var/lock/LCK..ttyS0

  18642

hfli@msh-pc1935:~/temp$ ps aux | grep minicom

hfli     17452  0.0  0.0   4368   832 pts/4    S+   16:39   0:00 grep --color=auto minicom

hfli     18642  0.0  0.1   7256  3328 pts/0    S+   14:25   0:01 minicom -b 38400 -D /dev/ttyS0

 

So, if one minicom captured the /dev/ttyS0, another minicom trying to capture ttyS0 will check whether the /var/lock/LCK..ttyS0 exists.

If LCK..ttyS0 exists, an error will be threw out.

 

hfli@msh-pc1935:~/temp$ minicom -b 38400 -D /dev/ttyS0

Device /dev/ttyS0 is locked.

 

And if I deleted /var/lock/LCK..ttyS0 manually, another minicom also can captured the /dev/ttyS0. But both the input and output cann’t work correctly.

 

----------OVER---------

 

评论

此博客中的热门博文

提交了30次才AC ---【附】POJ 2488解题报告

n个进程共享m个资源得死锁问题证明