/***********************************************************************
* I.MX6 Linux udev porting
* 声明:
* 在嵌入式产品上,我们可以使用mdev来解决热插拔的问题,同时也经常看到
* udev,所以尝试来移植一下,但是最终发现她会丢失内核阶段产生的uevent,
* 这导致无法生成内核阶段产生的设备节点,目前采用了mdev来做完成内核阶段的
* 设备节点生成,之后使用udev完成热插拔,这个问题后续有空再解决。
*
* 2016-1-17 深圳 南山平山村 曾剑锋
**********************************************************************/ 一、参考文档:
.“configure: error: Package requirements (blkid) were not met”
http://unix.stackexchange.com/questions/215406/configure-error-package-requirements-blkid-were-not-met
. 建立ARM交叉编译环境arm-none-linux-gnueabi-gcc
http://blog.sina.com.cn/s/blog_a000da9d0101436p.html
. [原创]嵌入式系统UDEV的移植
http://blog.chinaaet.com/snifer/p/38942
. 用Busybox制作嵌入式Linux的文件系统
http://www.jiancool.com/article/6782467490/
. 编译busybox,动态链接与静态链接的选择
http://blog.csdn.net/newnewman80/article/details/7971317
. busybox 制作动态库文件系统
http://www.xuebuyuan.com/913205.html
. 第 章使用 udev 进行动态内核设备管理
https://www.suse.com/zh-cn/documentation/sles11/singlehtml/book_sle_admin/cha.udev.html 二、Download:
. 网址:http://pkgs.fedoraproject.org/repo/pkgs/udev/
. 目标:udev-.tar.gz 或者 udev-.tar.gz 三、udev-.tar.gz 编译:
. Makefile 修改:
将142行:
CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
修改为:
CROSS = arm-linux-gnueabihf-
. make 四、udev-.tar.gz编译:
. ./configure --prefix=<your install path> --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf
. 上面的<your install path>会保存在udevd程序中;
. 可以考虑先找个地方编译安装一次,得到一些配置文件,再编译一次不指定位置的,替换udev等可执行文件。
. ./configure --prefix= --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf
. cp udev/test-udev udev/udevd udev/udevadm <filesystem root path>/sbin 五、Error:
. 编译udev-.tar.bz2不通过:
. 错误如下:
checking for xsltproc... /usr/bin/xsltproc
checking for library containing clock_gettime... -lrt
checking for BLKID... no
configure: error: Package requirements (blkid >= 2.20) were not met: No package 'blkid' found Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix. Alternatively, you may set the environment variables BLKID_CFLAGS
and BLKID_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
. 未能解决,换低版本。
. 编译udev-.tar.gz错误:
. 现象:
Running arm-linux-gnueabihf-ar: [OK]
Running arm-linux-gnueabihf-ranlib: [OK]
Compiling udev.c: [OK]
Linking udev: [ERROR]
arm-linux-gnueabihf-gcc -s -Wl -Wl,-warn-common udev.o -o udev libudev.a libs
ysfs/libsysfs.a
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-Wl’
make: *** [udev] Error
. 解决办法:
. 注释187行:LDFLAGS += -s -Wl
. 注释204行:LDFLAGS += -Wl,-warn-common
. 运行依赖动态库程序错误:
. 现象:
[^_^ bin]# ls udev main mainso -al
-rwxrwxr-x Jan main
-rwxrwxr-x Jan mainso
-rwxrwxr-x Jan udev
[^_^ bin]# ./udev
-/bin/sh: ./udev: not found
[^_^ bin]# ./main
hello world.
[^_^ bin]# ./mainso
-/bin/sh: ./mainso: not found
[^_^ bin]#
. 采用的编译方式:
. udev、mainso采用的共享库的方式编译的;
. main采用的静态编译的。
. 解决方法:
由于busybox采用了静态编译的方式进行编译,这样可以在不依赖库的情况下运行,
所以自己对busybox进行重现编译,采用动态库共享库的方式进行编译,程序运行正常。
. 使用udev-.tar.gz热插拔无效果:
. 配置没写好,本例以miniSD卡为例;
. cat /etc/udev/udev.conf
# Where in the filesystem to place the device nodes
udev_root="/dev" # The name and location of the udev database.
udev_db="/dev/.udevdb" # The name and location of the udev rules file(s).
udev_rules="/etc/udev/rules.d" # The syslog() priority: "err", "info", or the numerical value.
udev_log="err"
. cat /etc/udev/rules.d/udev-devfs.rules
......
ACTION=="add", KERNEL=="mmcblk[0-9][b-z][0-9]", RUN+="/bin/mkdir -p /mnt/mmc%n"
ACTION=="remove", KERNEL=="mmcblk[0-9][b-z][0-9]", RUN+="/bin/rm -rf /mnt/mmc%n"
......
. cat /etc/init.d/rcS
......
# 这个用于找回内核启动阶段的设备节点,要不然连ttymxc0(debug口)节点都没有。
/sbin/mdev -s
......
udevd --daemon &
udevstart
......
. 效果如下:
[zengjf@root ]# ls /mnt
[zengjf@root ]# mmc1: host does not support reading read-only switch. assuming write-enable.
mmc1: new high speed SDHC card at address aaaa
UEVENT[] add@/devices/plmmcblk1: mmc1:aaaa SS08G 7.40 GiB
atform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa
UEVENT[] add@/devices/virtual/bdi/:
mmcblk1: p1 p2 p3
UEVENT[] add@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1
UEVENT[] add@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p1
UEVENT[] add@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p2
UEVENT[] add@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p3 [zengjf@root ]# ps | grep udev
root : udevd --daemon
root : udevmonitor
root : udev mmc
root : udev bdi
root : grep udev
[zengjf@root ]# ls /mnt
mmc1 mmc2 mmc3
[zengjf@root ]# mmc1: card aaaa removed
UEVENT[] remove@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p3
UEVENT[] remove@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p2
UEVENT[] remove@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1/mmcblk1p1
UEVENT[] remove@/devices/virtual/bdi/:
UEVENT[] remove@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa/block/mmcblk1
UEVENT[] remove@/devices/platform/sdhci-esdhc-imx./mmc_host/mmc1/mmc1:aaaa [zengjf@root ]# ls /mnt
[zengjf@root ]#
. udev丢失kernel阶段设备事件:
如上,如果不使用 /sbin/mdev -s 获取内核阶段的的设备节点,udev无法获取到内核阶段的。
目前还没找到什么更好的办法来解决,也许以后不小心就解决了。 . udev-.tar.gz udevd运行错误:
. 错误现象:
......
udevd[]: lookup_group: specified group 'tty' unknown
......
udevd[]: lookup_group: specified group 'uucp' unknown
udevd[]: lookup_group: specified group 'kmem' unknown
udevd[]: lookup_group: specified group 'lp' unknown
......
udevd[]: lookup_group: specified group 'disk' unknown
udevd[]: lookup_group: specified group 'floppy' unknown
......
udevd[]: lookup_group: specified group 'disk' unknown
......
. 解决办法:
cat /etc/group
......
tty:x::tty
uucp:x::uucp
kmem:x::kmem
lp:x::lp
disk:x::disk
floppy:x::floppy
disk:x::disk
......
. cat /etc/udev/rules.d/udev-devfs.rules
......
ACTION=="add", KERNEL=="mmcblk[0-9][b-z][0-9]", RUN+="/bin/mkdir -p /mnt/mmc%n"
ACTION=="remove", KERNEL=="mmcblk[0-9][b-z][0-9]", RUN+="/bin/rm -rf /mnt/mmc%n"
......
. 运行正常效果:
input: USB OPTICAL MOUSE as /devices/platform/fsl-ehci./usb2/-/-1.2/-1.2:1.0/input/input4
generic-usb ::0538.0001: input,hidraw0: USB HID v1. Mouse [ USB OPTICAL MOUSE] on usb-fsl-ehci.-1.2/input0
udevd (): /proc//oom_adj is deprecated, please use /proc//oom_score_adj instead.
udevd version started
zengjf login: root
login[]: root login on 'ttymxc0'
[zengjf@root ~]# ls /mnt
[zengjf@root ~]# mmc1: host does not support reading read-only switch. assuming write-enable.
mmc1: new high speed SDHC card at address aaaa
mmcblk1: mmc1:aaaa SS08G 7.40 GiB
mmcblk1: p1 p2 p3 [zengjf@root ~]# ps
......
root : [kjournald]
root : udevd --daemon
root : [flush-:]
root : -sh
root : [mmcqd/]
root : ps
[zengjf@root ~]# ls /mnt
mmc1 mmc2 mmc3
[zengjf@root ~]# mmc1: card aaaa removed [zengjf@root ~]# ls /mnt
[zengjf@root ~]#

I.MX6 Linux udev porting的更多相关文章

  1. I.MX6 Linux eGTouch TouchScreen porting

    I.MX6 Linux eGTouch TouchScreen porting 一.Download Driver: http://www.eeti.com.tw/drivers_Linux.html ...

  2. I.MX6 bq27441 driver porting

    /************************************************************************** * I.MX6 bq27441 driver p ...

  3. I.MX6 Android iperf3 porting failed

    /***************************************************************************** * I.MX6 Android iperf ...

  4. I.MX6 Android i2c-tools porting

    /************************************************************************** * I.MX6 Android i2c-tool ...

  5. I.MX6 Linux mipi配置数据合成

    /*************************************************************************** * I.MX6 Linux mipi配置数据合 ...

  6. I.MX6 Linux、Jni ioctl 差异

    /*********************************************************************** * I.MX6 Linux.Jni ioctl 差异 ...

  7. I.MX6 Ubuntu core porting

    /*********************************************************************** * I.MX6 Ubuntu core porting ...

  8. I.MX6 linux Qt 同时支持Touch、mouse

    /***************************************************************************** * I.MX6 linux Qt 同时支持 ...

  9. I.MX6 Linux 自动获取AR1020 event input节点

    /*********************************************************************** * I.MX6 Linux 自动获取AR1020 ev ...

随机推荐

  1. Vim安装ctags插件

    问题描述: 系统安装ctags插件 问题解决: (1)下载ctags插件 (2)新下载的ctags文件是一个tar包文件,使用tar -zxcf命令进行解压缩 注: 解压缩之后的 ctags文件,如上 ...

  2. 【BZOJ】【3398】【USACO 2009 Feb】Bullcow 牡牛和牝牛

    组合计数/乘法逆元 排列组合求总方案数 这个可以用一个一维的动态规划解决: f[i][0]表示第i头牛是牝牛的方案数 f[i][1]表示第i头牛是牡牛的方案数 则转移为:f[i][0]=f[i-1][ ...

  3. Unity3D研究院之Machine动画脚本自动生成AnimatorController

    原地址: http://www.xuanyusong.com/archives/2811 以前的项目一直不敢用Machine动画,因为当时立项的时候Machine动画还不成熟,最近项目做得差不多了我能 ...

  4. POJ3468 A Simple Problem With Integers 树状数组 区间更新区间询问

    今天学了很多关于树状数组的技巧.一个是利用树状数组可以简单的实现段更新,点询问(二维的段更新点询问也可以),每次修改只需要修改2个角或者4个角就可以了,另外一个技巧就是这题,原本用线段树做,现在可以用 ...

  5. web服务器和应用服务器概念比较

    转自:http://hi.baidu.com/lclkathy/blog/item/dae3be36763a47370b55a970.html 一 常见的WEB服务器和应用服务器 在UNIX和LINU ...

  6. 计算XX年的某月某日是当年的第多少天?是星期几?

    /** * 编写程序,计算2013年的某月某日是当年的第多少天?是星期几?已知2013年元旦是星期二. */ import java.util.Scanner; public class Date { ...

  7. office开发心得——基于模板开发

    这几天正在写一个小程序,但用到生成word表格和Excel表格.到网上查了一些资料,发现如果生成表格模板相对比较固定即可把其制作成模板,需要设置什么格式可以直接在模板中设置,而程序仅需替换相应的内容即 ...

  8. AutoCAD图形打印出图片 C#

    这几天搞cad二次开发,用的是C#语言,目前在网上找到的资料比较少.弄了两天,才做出怎样实现打印出图片.首先得在AutoCAD软件界面下,设置打印机的页面设置和打印机设备名称一样(以防打印不出来).即 ...

  9. JBoss - 调整JVM内存 -Xms512m -Xmx1024m

    $JBOSS-HOME/server/下有3个目录,all/default/minimal,它们是表示3种配置,全部的配置.默认配置.最小配置,我们在启动JBOSS服务时,可以指定 run –c al ...

  10. 各种分区类型对应的partition_Id

    ID Name Note == ==== ==== 00h empty [空] 01h DOS 12-bit FAT [MS DOS FAT12] 02h XENIX root file system ...