本文用于记录buildroot编译过程中遇到的问题。
问题1 补丁文件重复应用
错误打印:
`>>> host-ncurses 6.1 Patching PATH=/home/lzh/work/rk3588/buildroot-rk3588/buildroot/output/rockchip_rk3588/host/bin:$PATH support/scripts/apply-patches.sh /home/lzh/work/rk3588/buildroot-rk3588/buildroot/output/rockchip_rk3588/build/host-ncurses-6.1 /home/lzh/work/rk3588/buildroot-rk3588/buildroot/dl/ncurses ncurses-6.1-20190609-patch.sh.bz2
Applying ncurses-6.1-20190609-patch.sh.bz2 using bzip2: Error: duplicate filename 'ncurses-6.1-20190609-patch.sh.bz2' Conflicting files are: already applied: /home/lzh/work/rk3588/buildroot-rk3588/buildroot/dl/ncurses/ncurses-6.1-20190609-patch.sh.bz2 to be applied : /home/lzh/work/rk3588/buildroot-rk3588/buildroot/dl/ncurses/ncurses-6.1-20190609-patch.sh.bz2 make: *** [package/pkg-generic.mk:272: /home/lzh/work/rk3588/buildroot-rk3588/buildroot/output/rockchip_rk3588/build/host-ncurses-6.1/.stamp_patched] Error 1 fail to build buildroot, try: (cd buildroot && make source -j1 && make -j1 V=s)`
这个错误提示表明在构建 host-ncurses 6.1 时出现了补丁文件重复应用的问题。 问题分析 错误信息显示: • 系统检测到重复的补丁文件名:ncurses-6.1-20190609-patch.sh.bz2 • 同一个补丁文件已经被应用过,现在又试图再次应用 • 这通常发生在构建过程中断后重新构建时
解决方案:清理并重新构建
cd buildroot
清理ncurses的构建状态
make host-ncurses-dirclean
重新下载源码并构建
make host-ncurses-source
make host-ncurses
重新构建时发现问题的根本原因是系统打开文件数限制导致的,属于系统资源问题。
问题2:系统打开文件数限制导致patch失败
错误打印:
patch: **** Can't rename file doc/html/ada/funcs/T.htm.oKavzck to doc/html/ada/funcs/T.htm : Too many open files make: *** [package/pkg-generic.mk:272: /home/lzh/work/rk3588/buildroot-rk3588/buildroot/output/rockchip_rk3588/build/host-ncurses-6.1/.stamp_patched] Error 2
解决方案:增加文件打开数限制
bash 查看当前限制
ulimit -n
临时增加文件打开数限制
ulimit -n 65536
这个问题在编译大型项目(特别是像ncurses这样有大量小文件的包)时很常见,增加文件打开数限制即可解决。