当前位置: 代码迷 >> 综合 >> imx6 yocto移植udev-100
  详细解决方案

imx6 yocto移植udev-100

热度:81   发布时间:2023-12-11 20:56:28.0

imx6q yocto通过bitbake自动生成的根文件系统与之前差异较大,外置sd卡无法挂载,#grep "udevd" rootfs -r发现启动的都不是以前/sbin下的守护进程,变成了/lib/udev/udevd,试图编最新的udev-182,解了一堆的配置与编译的依赖,最后还是链接不过,果断放弃!重新移植udev-100,步骤如下:

一、下载udev-100包后,修改Makefile如下:

CROSS_COMPILE ?=/opt/fsl-imx-fb/4.1.15-1.2.0/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-
CC = $(CROSS_COMPILE)gcc -mfloat-abi=hard -mfpu=neon --sysroot=/opt/fsl-imx-fb/4.1.15-1.2.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi

LD = $(CROSS_COMPILE)gcc -mfloat-abi=hard -mfpu=neon --sysroot=/opt/fsl-imx-fb/4.1.15-1.2.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi

编译中报错:
udevd.c: In function 'main':
udevd.c:1006:14: error: 'PRIO_PROCESS' undeclared (first use in this function)
  setpriority(PRIO_PROCESS, 0, UDEVD_PRIORITY);
解决方法:
在udevd.c中加入头文件:
#include <sys/time.h>

#include <sys/resource.h>

即可编译完成,生成udev、udevd、udevstart、udevinfo、udevtest,将其替换/sbin下对应文件。

二、在rootfs中查找调用/lib/udev/udevd的地方,改成/sbin/udevd。

三、修改/etc/init.d/rcS:
/bin/mount -t sysfs sysfs /sys
/bin/mount -t tmpfs tmpfs /dev
echo "Starting udevd..."
/sbin/udevd --daemon

/sbin/udevstart

四、因新系统会分区一个16MB的FAT32目录来存放zImage和设备树的文件,所以udev也会mount此目录,故在/etc/udev/rules.d修改12-add-sd.rules,滤掉mmcblk3:

action!="add",goto="farsight"
kernel=="mmcblk[0-2]p[0-9]",run+="/etc/mount-sd.sh %k"
kernel=="mmcblk[4-9]p[0-9]",run+="/etc/mount-sd.sh %k"
kernel=="mmcblk[0-2]",run+="/etc/mount-sd.sh %k"
kernel=="mmcblk[4-9]",run+="/etc/mount-sd.sh %k"
label="farsight"