亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1585 | 回復(fù): 0
打印 上一主題 下一主題

udev 文件系統(tǒng)制作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-06-24 15:15 |只看該作者 |倒序瀏覽

               
[精華] udev輕松上路     
第一、什么是udev?
這篇文章UDEV Primer給我們娓娓道來,花點時間預(yù)習(xí)一下是值得的。當然,不知道udev是什么也沒關(guān)系,
把它當個助記符好了,有了下面的上路指南,可以節(jié)省很多時間。我們只需要樹立一個信念:udev很簡單!
[color="#009999"]嵌入式
的udev應(yīng)用尤其簡單。
第二、為什么udev要取代devfs?
這是生產(chǎn)關(guān)系適應(yīng)生產(chǎn)力的需要,udev好,devfs壞,用好的不用壞的。
udev是硬件平臺無關(guān)的,屬于user space的進程,它脫離驅(qū)動層的關(guān)聯(lián)而建立在操作系統(tǒng)之上,基于這種設(shè)
計實現(xiàn),我們可以隨時修改及刪除/dev下的設(shè)備文件名稱和指向,
[color="#009999"]隨心
所欲地按照我們的愿望安排和管理設(shè)
備文件系統(tǒng),而完成如此靈活的功能只需要簡單地修改udev的配置文件即可,無需重新啟動操作系統(tǒng)。udev
已經(jīng)使得我們對設(shè)備的管理如探囊取物般輕松自如。
第三、如何得到udev?
udev的主頁在這里:
[color="#009999"]http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html

我們按照下面的步驟來生成udev的工具程序,以arm-linux為例:
1、 下載最新的udev
     wget
[color="#000066"]http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/udev-113.tar.bz2

     或其他的方法下載udev-113.tar.bz2 。
2、解壓udev-113.tar.bz2
    tar jxvf udev-113.tar.bz2
3、修改Makefile
    cd   udev-113  
    編輯Makefile,查找CROSS_COMPILE,修改CROSS_COMPILE ?= arm-linux-
4、編譯(交叉編譯器要用2.95.3以上的,不然可能編譯過不去。我用的是3.4.1)
    export PATH=/usr/local/arm/3.4.1/bin:$PATH
    make
    沒有什么意外的話當前目錄下生成udev,udevcontrol,udevd,udevinfo,udevmonitor,udevsettle,udevstart,
    udevtest,udevtrigger九個工具程序,在嵌入式系統(tǒng)里,我們只需要udevd和udevstart就能使udev工作得很好,
    其他工具則幫助我們完成udev的信息察看、事件捕捉或者更高級的操作。
5、看看用到了哪共享些庫
    arm-linux-readelf -a udevstart | grep "Shared library"
    ----------------------------------------------------------------------------------
    eg:
    [root@localhost udev-113]# arm-linux-readelf -a udevstart | grep "Shared library"
     0x00000001 (NEEDED)                      Shared library: [libc.so.6]
    ----------------------------------------------------------------------------------
    說明用到了libc.so的庫,所以要把 libc.so 和 libc.so.6 庫拷貝到文件系統(tǒng)的/lib目錄.
   
[color="#009999"]其它
共享庫,用同樣方法只是把arm-linux-readelf -a udevstart | grep "Shared library"中的
    udevstart 改成 別的文件名。
6、拷貝相應(yīng)的共享庫到/lib目錄(共享庫指交叉編譯器的庫在本文用到的庫在 /usr/local/arm/3.4.1).
    (/lib是你建的文件系統(tǒng)的目錄,不是你的電腦的/lib。提醒下就怕新手盲目亂做。)
ld-2.3.2.so   ld-linux.so.2   libc.so.6   libc.so   libc-2.3.2.so
   
第四、如何配置udev?
首先,udev需要內(nèi)核sysfs和tmpfs的支持,sysfs為udev提供設(shè)備入口和uevent通道,tmpfs為udev設(shè)備文件提
供存放空間,也就是說,在上電之前系統(tǒng)上是沒有足夠的設(shè)備文件可用的,我們需要一些技巧讓kernel先引導(dǎo)
起來。
于在kernel啟動未完成以前我們的設(shè)備文件不可用,如果使用mtd設(shè)備作為rootfs的掛載點,這個時候/dev/mtdblock
這個設(shè)備目錄是不存在的,我們無法讓kernel通過/dev/mtdblock/X這樣的設(shè)備找到rootfs,kernel只好停在那里驚慌。
這個問題我們可以通過給kernel傳遞設(shè)備號的方式來解決,在
[color="#009999"]linux
系統(tǒng)中,mtdblock的主設(shè)備號是31,part號
從0開始,那么以前的/dev/mtdblock/3就等同于31:03,以次類推,所以我們只需要修改bootloader傳給kernel
的cmd line參數(shù),使root=31:03,就可以讓kernel在udevd未起來之前成功的找到rootfs。
另外一種方法就是給kernel傳遞未經(jīng)歸類的設(shè)備文件名,在udev未創(chuàng)建之前,所有的設(shè)備實際上已經(jīng)通過sysfs
建立,mtdblockX的位置相對于/sys/block/mtdblockX/dev,這個文件里存放著mtdblockX的設(shè)備號,形式與上
一種方式相同。這時由于沒有相應(yīng)的udev規(guī)則,所有的設(shè)備都被隱含地映射到/dev目錄下,mtdblockX對應(yīng)于
/dev/mtdbockX,這樣我們給kernel傳遞root=/dev/mtdblock3,kernel發(fā)現(xiàn)/dev沒有被建立,就自動從映射表里
查找對應(yīng)關(guān)系,最后取出/sys/block/mtdblockX/dev里的設(shè)備號,完成rootfs的掛載。
O.K.下一個問題。
其次,需要做的工作就是重新生成rootfs。
      1.把udevd和udevstart,test-udev,udevcontrol,udevtrigger,
         udevinfo,udevmonitor,udevsettle,udevtest復(fù)制到/sbin目錄。
      2. 然后我們需要在/etc/下為udev 建立設(shè)備規(guī)則
        建立設(shè)備規(guī)則是udev最為復(fù)雜的一步。 這篇文章提供了最完整的指導(dǎo):Writing udev rules
        文中描述的復(fù)雜規(guī)則我們可以暫時不用去理會,上路指南將帶領(lǐng)我們輕松穿過這片迷霧。
        這里提供一個由簡入 繁的方法,對于嵌入式系統(tǒng),這樣做可以一勞永逸。
1、在前面用到的udev-113目錄里,有一個etc目錄,里面放著的udev目錄包含了udev設(shè)備規(guī)則的詳細樣例文
本。為了簡單而又簡潔,我們只需要用到etc/udev/udev.conf這個文件,在我們的rootfs/etc下建立一個udev目
錄,把它復(fù)制過去,這個文件很簡單,除了注釋只有一行,是用來配置日志信息的,嵌入式系統(tǒng)也許用不上
日志,但是udevd需要檢查這個文件。
2、在rootfs/etc/udev下建立一個rules.d目錄.
         mkdir   -p   rootfs/etc/udev/rules.d      
   
    生成一個空的配置文件
        touch etc/udev/rules.d/udev.rules。
3. 然后在rootfs/etc/udev/目錄下新建udev.conf文件。
      
      touch etc/udev/udev.conf
     然后 我們來編輯這個文件并向它寫入以下配置項:
###############################################
udev_root="/dev/"udev_rules="/etc/udev/rules.d/"udev_log="err"
# vc devices
KERNEL=="tty[0-9]*", NAME="vc/%n"
# block devices
KERNEL=="loop[0-9]*", NAME="loop/%n"
# mtd devices
KERNEL=="mtd[0-9]*", NAME="mtd/%n"
KERNEL=="mtdblock*", NAME="mtdblock/%n"
# input devices
KERNEL=="mice" NAME="input/%k"
KERNEL=="mouse[0-9]*", NAME="input/%k"
KERNEL=="ts[0-9]*", NAME="input/%k"
KERNEL=="event[0-9]*", NAME="input/%k"
# misc devices
KERNEL=="apm_bios", NAME="misc/%k"
KERNEL=="rtc", NAME="misc/%k"
################################################
        保存它為 udev.conf,注意: udev.conf的位置是rootfs/etc/udev/udev.conf
        我們的設(shè)備文件系統(tǒng)基本上就可以了,udevd和udevstart會自動分析這個文件。
4、   為了使udevd在kernel起來后能夠自動運行,我們在rootfs/etc/init.d/rcS中增加以下幾行:
##################################
/bin/mount -t tmpfs tmpfs /dev          /bin/mount -t sysfs sysfs /sys
      
         #掛載/proc為proc文件系統(tǒng)
echo "mount /proc as proc"
/bin/mount -n -t   proc none /proc
echo "Starting udevd..."
/sbin/udevd --daemon /sbin/udevstart
附加:
(#/sbin/udevd --deamon
#/sbin/udevadm trigger)
##################################
5、   還有一點就是別忘要在/dev下手工建console和null等設(shè)備。
      cd /dev
      mknod -m 660 console c 5 1      mknod -m 660 null     c 1 3
  
6、   重新生成rootfs,燒寫到flash指定的rootfs part中。
7、   如果需要動態(tài)改變設(shè)備規(guī)則,可以把etc/udev 放到j(luò)ffs或yaffs part,以備修改,根據(jù)需求而定,可以隨時擴
      充udev.conf中的配置項。
8、生成文件系統(tǒng)。(不同的板子,和文件系統(tǒng),或目錄不同,下面的方法不是通用的根據(jù)個人情況改下。)
    ./mkfs.jffs2 -p -l -e 0x20000 -n -v -r /data/rootfs2.6/ -o filesys.jffs2
支持熱拔插。
echo /sbin/mdev > /proc/sys/kernel/hotplug
==================================================================================
    我的rcS文件
==================================================================================
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
HOSTNAME=OMAP5912OSK
hostname $HOSTNAME
echo ""
echo "******************************************"
echo "Starting System Init for $HOSTNAME"
echo "******************************************"
# goto the init.d directory
cd /etc/init.d
# Mount the default file systems
mount -a # Mount the default file systems
/bin/mount -t tmpfs tmpfs /dev/bin/mount -t sysfs sysfs /sys
echo "Starting udevd..." /sbin/udevd --daemon /sbin/udevstart
/etc/rc.d/init.d/netd start
/etc/rc.d/init.d/httpd start
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.2 up
===================================================================================
               
                附加:
Mount使用的fstab文件類似:
none                    /tmp                    ramfs   defaults        0 0
udev                    /dev                    ramfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/70379/showart_1976157.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP