如何开发板上移植udev并实现移动设备的自动挂载

来源:互联网 发布:为知笔记 开源 编辑:程序博客网 时间:2024/05/01 17:45

转载地址:

http://blog.csdn.net/phoenix500526/article/details/51159567


在整个移植过程中,我所使用的操作平台:

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修改内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    #device mount-point type options dump fsck order  
  2.     proc /proc proc defaults 0 0  
  3.     tmpfs /tmp tmpfs defaults 0 0  
  4.     sysfs /sys sysfs defaults 0 0  
  5.     tmpfs /dev tmpfs defaults 0 0</span>  

在这一步骤中,需要视情况而定。如果fstab中缺少tmpfs就添加tmpfs中的两个语句,如果缺少sysfs就添加sysfs的语句。

如果添加或修改了已存在的tmpfssysfs,这可能会导致意外的错误,比如你的内核可能会一直停留在”nonblocking 

pool is initialized”处,无法跑起来。


rcS修改内容(rcS中添加如下语句)

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    /bin/udevd --daemon  
  2.     /bin/udevstart</span>  

添加完成后保存退出。


三、编写自动挂载u盘和sd卡的脚本

/mnt目录下创建usb目录和sd目录,作为移动存储设备的挂载点。

u盘:

1、修改/etc/udev/udev.conf文件,添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    # The initial syslog(3) priority: "err", "info", "debug" or its  
  2.     # numerical equivalent. For runtime debugging, the daemons internal  
  3.     # state can be changed with: "udevcontrol log_priority=<value>".  
  4.     udev_log="err"</span>  

2、在/etc/udev/rules.d目录下创建规则文件。

a、实现u盘自动挂载:sudovim 11-usb-add.rules

添加内容如下:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    ACTION!="add",GOTO="farsight"  
  2.     KERNEL=="sd[a-z][0-9]",RUN+="/sbin/mount-usb.sh %k"  
  3.     LABEL="farsight"</span>  

实现u盘卸载自动删除节点:sudovim 11-usb-remove.rules

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    ACTION !="remove",GOTO="farsight"  
  2.     SUBSYSTEM!="block",GOTO="farsight"  
  3.     KERNEL=="sd[a-z][0-9]",RUN+="/sbin/umount-usb.sh"  
  4.     LABEL="farsight"</span>  

3、添加usb挂载脚本

/sbin下创建mount-usb.sh文件并添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    #!/bin/sh  
  2.     /bin/mount -t vfat /dev/$1 /mnt/usb  
  3.     sync</span>  

/sbin下创建umount-usb.sh文件并添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    #!/bin/sh  
  2.     sync  
  3.     umount /mnt/usb</span>  

添加完成后保存退出并将其权限修改为可执行。

SD卡:

1、在/etc/udev/rules.d目录下创建规则文件。

a、实现SD卡自动挂载:sudovim 12-sd-add.rules

添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    ACTION!="add",GOTO="farsight"  
  2.     KERNEL=="mmcblk[0-9]p[0-9]",RUN+="/sbin/mount-sd.sh %k"  
  3.     LABEL="farsight"</span>  

实现sd卡卸载自动删除节点:sudovim 12-sd-remove.rules

添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    ACTION!="remove",GOTO="farsight"   
  2.     SUBSYSTEM!="block",GOTO="farsight"   
  3.     KERNEL=="mmcblk[0-9]p[0-9]",RUN+="/sbin/umount-sd.sh"   
  4.     LABEL="farsight"</span>  

2、添加sd挂载脚本

/sbin下创建mount-sd.sh文件并添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    #!/bin/sh  
  2.     /bin/mount -t vfat /dev/$1 /mnt/sd  
  3.     sync</span>  

/sbin下创建umount-sd.sh文件并添加如下内容:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:14px;">    #!/bin/sh  
  2.     sync  
  3.     umount /mnt/sd</span>  

添加完成后保存退出并将其权限修改为可执行。

====================================


 

UDEV的移植


【实验目的】

移植udev 实验自动创建设备节点和自动挂在SD卡和U盘。

【实验环境】

1、  Ubuntu 10.10发行版

2、  u-boot-2010.03

3、  FS2410平台

4、  交叉编译器 arm-none-Linux-gnueabi-gcc-4.3.2

【实验步骤】

1、下载UDEV源码udev-080.tar.bz2,网址:

http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/,

    并解压:tar xvf udev-080.tar.bz2

2.交叉编译(在udev-080目录下)。

vim Makefile

修改Makefile,具体修改如下:

CROSS = arm-none-linux-gnueabi-

保存退出。

执行命令:make 进行编译

然后执行

arm-none-linux-gnueabi-strip udev udevd udevstartudevinfo udevtest。

并拷贝这些文件(udev udevd udevstart udevinfo udevtest)到/source/rootfs/bin目录下面。

3.修改/source/rootfs/etc/fstab为

#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

4.修改/source/rootfs/etc/init.d/rcS,添加如下内容

/bin/udevd --daemon

/bin/udevstart

这样当我们插上U盘和SD卡的时候,就可以看到我们的设备节点而不需要手动创建设备节点。

5.SD卡或U盘自动挂载的实现

 

拷贝实验代码中udev目录(老师给的代码)到 rootfs/etc

拷贝mount-sd.sh、 umount-sd.sh 、mount-usb.sh、 umount-usb.sh到/source/rootfs/sbin

这个时候当插入U盘或SD卡时就会自动挂载在tmp下。可以通过修改mount-sd.s和mount-usb.sh添加其他功能和修改挂载点。



0 0
原创粉丝点击