1. 程式人生 > >如何在i.mx6dl開發板上移植udev並實現移動裝置的自動掛載

如何在i.mx6dl開發板上移植udev並實現移動裝置的自動掛載

在整個移植過程中,我所使用的操作平臺:

hostUbuntu14.04 LTS

boardMCIMX6DL-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的語句。

如果新增或修改了已存在的tmpfssysfs,這可能會導致意外的錯誤,比如你的核心可能會一直停留在”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>

新增完成後儲存退出並將其許可權修改為可執行。