在整個移植過程中,我所使用的操作平臺:
host:Ubuntu14.04 LTS
board:MCIMX6DL-SDP
udev版本:udev100
一、移植udev。
下載udev的源碼並進行解壓。解壓完畢後進入目錄,並修改Makefile文件中的CROSS_COMPILE字段,將其改爲host下
交叉工具鏈。
注意:此處的交叉工具鏈名字後面不要有空格!!
修改CFLAGS,在後面添加-mfloat-abi=hard(一定要添加,一定要添加,一定要添加,重要的事情說三遍)
之後保存退出,並執行命令make,執行完後生成了相應的文件。將生成的文件中的udev,udevd,udevstart,udevinfo和
udevtest文件拷貝到根文件系統的/bin目錄中。
注意:如果沒有添加-mfloat-abi=hard,就會報出如下錯誤:
error:udev uses VFP register arguments,udev.o does not
二、修改/etc/fstab和/etc/init.d/rcS文件
fstab修改內容:
<span style="font-size:14px;"> #device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0</span>
在這一步驟中,需要視情況而定。如果fstab中缺少tmpfs就添加tmpfs中的兩個語句,如果缺少sysfs就添加sysfs的語句。
如果添加或修改了已存在的tmpfs或sysfs,這可能會導致意外的錯誤,比如你的內核可能會一直停留在”nonblocking
pool is initialized”處,無法跑起來。
rcS修改內容(在rcS中添加如下語句):
<span style="font-size:14px;"> /bin/udevd --daemon
/bin/udevstart</span>
添加完成後保存退出。
三、編寫自動掛載u盤和sd卡的腳本
在/mnt目錄下創建usb目錄和sd目錄,作爲移動存儲設備的掛載點。
u盤:
1、修改/etc/udev/udev.conf文件,添加如下內容:
<span style="font-size:14px;"> # The initial syslog(3) priority: "err", "info", "debug" or its
# numerical equivalent. For runtime debugging, the daemons internal
# state can be changed with: "udevcontrol log_priority=<value>".
udev_log="err"</span>
2、在/etc/udev/rules.d目錄下創建規則文件。
a、實現u盤自動掛載:sudovim 11-usb-add.rules
添加內容如下:
<span style="font-size:14px;"> ACTION!="add",GOTO="farsight"
KERNEL=="sd[a-z][0-9]",RUN+="/sbin/mount-usb.sh %k"
LABEL="farsight"</span>
實現u盤卸載自動刪除節點:sudovim 11-usb-remove.rules
<span style="font-size:14px;"> ACTION !="remove",GOTO="farsight"
SUBSYSTEM!="block",GOTO="farsight"
KERNEL=="sd[a-z][0-9]",RUN+="/sbin/umount-usb.sh"
LABEL="farsight"</span>
3、添加usb掛載腳本
在/sbin下創建mount-usb.sh文件並添加如下內容:
<span style="font-size:14px;"> #!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt/usb
sync</span>
在/sbin下創建umount-usb.sh文件並添加如下內容:
<span style="font-size:14px;"> #!/bin/sh
sync
umount /mnt/usb</span>
添加完成後保存退出並將其權限修改爲可執行。
SD卡:
1、在/etc/udev/rules.d目錄下創建規則文件。
a、實現SD卡自動掛載:sudovim 12-sd-add.rules
添加如下內容:
<span style="font-size:14px;"> ACTION!="add",GOTO="farsight"
KERNEL=="mmcblk[0-9]p[0-9]",RUN+="/sbin/mount-sd.sh %k"
LABEL="farsight"</span>
實現sd卡卸載自動刪除節點:sudovim 12-sd-remove.rules
添加如下內容:
<span style="font-size:14px;"> ACTION!="remove",GOTO="farsight"
SUBSYSTEM!="block",GOTO="farsight"
KERNEL=="mmcblk[0-9]p[0-9]",RUN+="/sbin/umount-sd.sh"
LABEL="farsight"</span>
2、添加sd掛載腳本
在/sbin下創建mount-sd.sh文件並添加如下內容:
<span style="font-size:14px;"> #!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt/sd
sync</span>
在/sbin下創建umount-sd.sh文件並添加如下內容:
<span style="font-size:14px;"> #!/bin/sh
sync
umount /mnt/sd</span>
添加完成後保存退出並將其權限修改爲可執行。