解决过程
automake版本
先把上面的补丁按照路径都放在路径上,这里首先会遇到一个问题,说automake-1.16版本太老,但使用上面的笔记编译后,再软链接就会说版本不匹配:

然后看到如下文章:
2020-12-17 错误记录:automake 1.15.1-version mismatch_error:version mismatch.this is automake 1.15-优快云博客
然后在out/t113/evb1_auto/buildroot/buildroot/build/gstreamer1-1.14.4/configure中,找到如下:

看到是有这两个选项的,那就在调用这个脚本的时候添加上,
是在out/t113/evb1_auto/buildroot/buildroot/build/gstreamer1-1.14.4/autogen.sh调用的,添加这两个选项:
...
CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc'
if test "x$package" = "xgstreamer"; then
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --enable-failing-tests --enable-poisoning"
elif test "x$package" = "xgst-plugins-bad"; then
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-player-tests"
fi
CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal --with-automake" #添加两个选项
...
然后因为这是在out目录下,下次编译就会重新解压gstreamer1-1.14.4源码,修改就没了,需要制作一个补丁,让编译前自动打补丁,制作补丁步骤如下:
先不要修改源码,将gstreamer1-1.14.4源码目录重命名成gstreamer1-1.14.4.old,然后拷贝一份在同级目录下
rsync -aPHq gstreamer1-1.14.4.old/ gstreamer1-1.14.4
然后来到此目录下:
cd out/t113/evb1_auto/buildroot/buildroot/build/gstreamer1-1.14.4
然后根据以上方法修改gstreamer1-1.14.4中的内容,这份源码作为修改后。
回到上一级目录:
cd ..
使用diff指令生成补丁,数字先随便填,后面文字写修改说明:
diff -arNu gstreamer1-1.14.4.old gstreamer1-1.14.4 > ../../../../../../buildroot/buildroot-201902/package/gstreamer1/gstreamer1/0005-resolve_automake_version_issues.patch
检查生成出来的补丁有没有多余内容:

然后看看哪个目录下有哪些补丁:

把补丁数字改成最后一个数字:

回到SDK根目录,删除out目录gstreamer1-1.14.4和gstreamer1-1.14.4.old:
rm -rf out/t113/evb1_auto/buildroot/buildroot/build/gstreamer1-1.14.4
rm -rf out/t113/evb1_auto/buildroot/buildroot/build/gstreamer1-1.14.4.old
继续编译文件系统:
./build.sh buildroot_rootfs
然后发现上面这个补丁打了还是报一样的错,证明不是在这里修改,无奈之下我直接修改源码gstreamer1-1.14.4源码目录下的configure文件,在文件中开头加入三行指令,就能编译过了,且无需修改系统上的任何文件:
aclocal
automake
autoreconf
自适应打补丁
因为要兼容其他ubuntu版本的编译,不能直接将补丁打好,这会导致其他版本的ubuntu环境无法编译。
我想到的方法是,在buildroot中创建一个目录:buildroot/select_package,将用到的补丁,按照buildroot/buildroot-201902/package/中的结构,拷贝过来:

然后在build/mkcmd.sh中的build_buildroot_rootfs()函数开头添加ubuntu22.04的判断:
function build_buildroot_rootfs()
{
mk_info "build buildroot ..."
# 判断当前环境是否为ubuntu22.04
if grep -qi "ubuntu" /etc/os-release && grep -qi "22.04" /etc/os-release; then
echo "Ubuntu 22.04 LTS detected."
cp -R $LICHEE_TOP_DIR/buildroot/select_package/* $LICHEE_TOP_DIR/buildroot/buildroot-201902/package/
fi
...
当为ubuntu22.04时,将select_package内的脚本拷贝至buildroot-201902/package/。
然后需要在buildroot-201902/package下编写.gitignore,忽略这些补丁:
bison/0004-dtc-parser.tab_add_extern_YYLTYPE_yylloc.patch
cmake/0003-host.patch
fakeroot/0003-libfakeroot.c-define-_stat_ver-if-not-already-define.patch
gstreamer1/gst1-plugins-bad/0003-make-fix.patch
gstreamer1/gst1-plugins-base/0001-make-fix.patch
gstreamer1/gstreamer1/0002-gstreamer-make43-wo-automake.patch
gstreamer1/gstreamer1/0003-resolve_automake_version_issues.patch
libgpg-error/0001-strerror-sys-c-error.patch
libgpg-error/0002-gawk_does_not_require_escape_characters.patch
m4/0003-m4.patch
589

被折叠的 条评论
为什么被折叠?



