『壹』 linux 載入不存在的usb設備
方法一:在/etc/init.d/rcS中添加mount -t usbfs none /proc/bus/usb. 方法二:在shell中輸入mount -t usbfs /proc/bus/usb /proc/bus/usb. 前提是在編譯內核時選中usb device filesystem。
『貳』 linux主機側與設備側USB驅動
USB採用樹形拓撲結構,主機側和設備側的USB控制器分別稱為主機控制器((Host Controller)和USB設備控制器(UDC),每條匯流排上只有一個主機控制器,負責協調主機和設備間的通信,而設備不能主動向主機發送任何消息。
在Linux系統中,USB驅動可以從兩個角度去觀察,一個角度是主機側,一個角度是設備側。從上圖主機側去看,在Linux驅動中,處於USB驅動最底層的是USB主機控制器硬體,在其上運行的是USB主機控制器驅動,在主機控制器上的為USB核心層,再上層為USB設備驅動層(插入主機上的U盤、滑鼠、USB轉串口等設備驅動)。因此,在主機側的層次結構中,要實現的USB驅動包括兩類:USB主機控制器驅動和USB設備驅動,前者控制插入其中的USB設備,後者控制USB設備如何與主機通信。Linux內核中的USB核心負責USB驅動管理和協議處理的主要工作。主機控制器驅動和設備驅動之間的USB核心非常重要,其功能包括:通過定義一些數據結構、宏和功能函數,向上為設備驅動提供編程介面,向下為USB主機控制器驅動提供編程介面;維護整個系統的USB設備信息;完成設備熱插拔控制、匯流排數據傳輸控制等。
『叄』 Linux系統設置U盤自動掛載
筆者在工作中遇到自動掛載U盤,於是在樹莓派和紅帽系統上研究了一下U盤實現自動掛載。總的來說,Linux gnome/kde窗口環境下有移動存儲的管理程序,可以實現自動掛載移動存儲設備,但是在命令行下 通常需要用mount命令手動掛載USB存儲設備。第二種方法有風險,第三種是設備管理服務udev添加規則實現自動mount,第四種方法則進一步封裝mount添加日誌功能。
Raspberry Pi中USB設備的自動掛載由基於LXDE的GUI / DE處理,具體來說,由文件管理器PCManFM控制。若要禁用此行為,請打開「文件管理器」,然後從「編輯」菜單中選擇「首選項」。選擇「卷管理」選項卡,取消選中第二個選項「掛載可移動介質...」 ,可以禁用第三個選項「顯示可用選項...」設置,以防止彈出窗口提示可用程序。
系統開機時會主動讀取/etc/fstab這個文件中的內容,根據文件裡面的配置掛載磁碟。使用檢查UUID: sudo blkid,顯示關於可用塊設備的信息, 查找您的設備(如 / dev / sda1 )並復制其UUID。此方法只限於開機時已經插入U盤了,開機後再插入就不發自動掛載,需要執行sudo mount -a命令。
在文件/ etc / fstab底部添加:UUID={YOUR-UID} {/path/to/mount/point} {file-system-type} defaults,errors=remount-ro 0 1
倒數第二是mp備份設置,當其值設置為1時,將允許mp備份程序備份;設置為0時,忽略備份操作。倒數第一是fsck磁碟檢查設置,其值是一個順序,當其值為0時,永遠不檢查;而 / 根目錄分區永遠都為1,其它分區從2開始,數字越小越先檢查。
修改後保存,關閉,重新啟動設備以檢查或鍵入: sudo mount -a 。mount -a 是自動掛載 /etc/fstab 裡面的東西,會忽略所有已經完成的操作。但是筆者認為在這裡面添加太過於危險,不要輕易操作這個文件,有可能造成系統無法開機。外部設備在插入時掛載,在未插入時忽略,不然無法進入系統,這需要添加 nofail 選項,但是操作這個文件不太方便,有其他剛好的方法。
文件種有兩種ACTION,add和remove。在U盤插入或者拔出時,自動激活mount和unmount,完成設備自動掛載。
KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"
SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="Untitled-%k"
ACTION=="add", ENV{mount_options}="relatime,sync"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="iocharset=utf8,umask=000"
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="iocharset=utf8,umask=000"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
LABEL="media_by_label_auto_mount_end"
第三種方法中,mount或者unmount命令在實際運用中是無法記錄日誌的。在生產系統中就需要添加這個插入U盤和拔出U盤的動作,作為審核調查依據。將上面的mount -o或者unmount -l替換成usbhotplug.sh mount 和usbhotplug.sh unmount。
#!/usr/bin/bash
time=`date "+%Y%m%d"`
LOG_FILE="/home/pi/mount-usb-$time.log"
date=`date`
echo $date >> $LOG_FILE
CMD=$1
case $CMD in
'mount')
/bin/mkdir -p $4
echo "/bin/mkdir -p $4" >> $LOG_FILE
sleep 2
/bin/mount -o $2 $3 $4
echo "/bin/mount -o $2 $3 $4" >> $LOG_FILE
sync
echo "----------" >> $LOG_FILE
;;
'umount')
sync
/bin/umount -f $2
echo "/bin/umount $2" >> $LOG_FILE
sleep 2
/bin/rmdir $2
echo "/bin/rmdir $2" >> $LOG_FILE
echo "----------" >> $LOG_FILE
;;
esac
『肆』 在linux環境下,如何禁用和開啟USB存儲設備本人這方面菜鳥,盼回復。
圖形界面的話,你可以看看你的系統,我記得有的系統使用 USB 設備需要加入特殊的用戶組,你把不想讓他用 U 盤的人從這個組裡面去掉就行了(不過有些系統可能沒有把許可權分的這么清楚)。某些系統用了 SELinux 許可權系統,這個好像也有相關的設置。
命令行下面只有 root 能掛載,禁止別人 sudo 到 root 許可權就行了。
另外,U 盤是需要一個驅動的。具體名字忘了,你可以去搜索一下。從內核 moles 裡面挪走這個驅動模塊就行了。
不過這個需求太少見,我反正對此沒有研究。
『伍』 Linux如何載入與卸載U盤
第一:以root用戶登陸
先載入USB模塊 modprobe usb-storage
用fdisk -l 看看U盤的設備
假如U盤是sda1
第二:確定在 目錄 /mnt 下建立了 文件夾 /usb,如果未建立可鍵入一下命令:
md /mnt/usb
成功後進行下一步。
第三,:載入 u 盤,需鍵入以下命令:
mount -t vfat /dev/sda /mnt/usb_disk
成功後,即可使用 u 盤了, 文件就在目錄 /mnt/usb 下。
第四:卸載u盤
在使用完u盤後,在拔出前需要先鍵入卸載U盤命令
命令如下: umount /mnt/usb