A40i源码编译问题-1

使用的是forlinx给的vmware15–ubuntu18镜像

fakeroot: preload library `libfakeroot.so' not found, aborting.

​查看linux-3.10/scripts/build.sh第298行:

../scripts/build_rootfs.sh e ./$RAMFS_TARGET > /dev/null翻译过来就是:

../scripts/build_rootfs.sh e ./rootfs.cpio.gz > /dev/null,找到build_rootfs.sh

发现最终指向函数extract_rootfs(),而主要是在命令 fakeroot cpio -i出错的。

​接着在命令行(pwd=linux-3.10/output/)执行/home/forlinx/work/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/fakeroot cpi -h 发生如下错误:

fakeroot: preload library 'libfakeroot.so' not found, aborting.

与编译一致,那么这个应该是构建工具的错误,现在需要知道上面使用的fakeroot 是交叉编译的fakeroot,还是普通的主机的fakeroot。使用命令file lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/fakeroot,发现只是shell脚本,那么打开该文件可以看到命令行。

if [ -n "$PATHS" ]
then
    for dir in `echo $PATHS | sed 's/:/ /g'`
    do
if test -r "$dir/$LIB"
then
    libfound=yes
    ABSLIB="$dir/$LIB"
fi
    done
else
    if test -r "$LIB"
    then
libfound=yes
ABSLIB="$LIB"
    fi
fi

这里打印了一下:

$LIB=libfakeroot.so
$PATH=/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib:
/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib64/libfakeroot:
/root/workspace/allwinner/A40i/bsp/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr/lib32/libfakeroot

也就是说在上面几个目录寻找libfakeroot,但是我用find -name libfakeroot发现我的目录是:

【我A40i源代码位置】/out/sun8iw11p1/linux/common/buildroot/host/usr/lib/libfakeroot.so

也就是说lib文件存在,问题在于:【我A40i源代码位置】与/root/workspace/allwinner/A40i/bsp/lichee这一段不匹配。

那么文件有,位置不对就简单了。猜测可能是使用的pwd生成的脚本文件,做如下操作:

1. 把代码移动到和上面一致的目录
2. 重新编译buildroot(挺难的)
3. 修改out所有文件里只有有该目录的

这里我选择的是:2,删除out目录,然后在命令行输入./build.sh -m buildroot等待1小时30分钟左右即可。

Logo

鸿蒙生态一站式服务平台。

更多推荐