本人是个大学生,在暑假里跟着嘉立创训练营学习一下嵌入式Linux,在此之前没有接触过,只是会一点单片机,如果你也跟着嘉立创的教程就会发现,他是通过做小手机来锻炼学习的,在原理方面可能没有那么详细,所以我对于Linux的理解也不是很深(我刚解决这个问题就来发博客,后面还没学)。我相信大家一开始只是跟着教程一步一步复制粘贴,安装环境——编译,对每一步都没有什么自己的理解,所以一遇到报错就不会解决(我就是这样,这个问题我查了将近有两个星期),但是事实是真的要一步一步看错误信息。我一开始在全网到处找,CSDN,贴吧,知乎,立创论坛,立创生态群…..有和我类似的问题,但是用了他们的方法并没有解决,我不知道问题在哪里,难道是我因为镜像源更新成了第一个吃螃蟹的人?那接下来我会从我的思路为大家讲解。
首先,看看你的报错是不是和我一样:
我的这个报错的步骤是位于在安装好编译debian的环境之后,嘉立创的文档里提示需要换源:
我换源163之后仍然报错,看看你的情况是否和我一样。这个时候看错误信息就知道,肯定是从镜像网站上无法下载Release:
E:Failed getting release file http://mirrors.163.com/debian/dists/buster/Release
于是我的思路就去163的镜像站看看有没有Release,才进到dists就发现,网易镜像源已经没有buster版本的debian了,buster是debian10的代号。这里只有debian11和debian12
OK,到这一步,你肯定也和我想的一样,那我直接在脚本里改debian版本就好了啊,没错,于是我把修改镜像源的config文件丢给豆包,她告诉我这一行就是换代号的(在此说明debian11为“Bullseye”,debian12为“Bookworm”)
于是我傻乎乎的欢换了代号,发现仍然报错
不过这里提示,可以在什么logs里可以看到详情
W:See debootstrap/debootstrap.logs for details
于是我在debian/ubantu-build-service\\buster-desktop-arm64\\chroot 里打开了这个文件:
qemu: uncaught target signal 11 (Segmentation fault) – core dumped Segmentation fault (core dumped)
这里我不知道什么意思,到CSDN搜了一下,应该是qemu版本太低。Ubuntu18.04只有2.11左右的版本,而编译debian11,需要4.2,所以需要升级Ubuantu,但是不行啊,嘉立创里强调了要18.04,所以这个方法放弃了,参考资料如下。
rockchip Debian 编译报错_running debootstrap second stage under qemu-CSDN博客
接下来只能老老实实找一个有debian10(buster)的镜像源了,经过我不懈的翻找,我发现腾讯的镜像源里还有
因为我已经忙了好多好多天了,一开始不相信是源的问题,所以找到了之后真是无比激动,接下来就是仿照configure文件里的格式,换成腾讯镜像源:
–mirror-bootstrap "http://mirrors.tencent.com/debian-archive/debian" \\
–mirror-chroot "http://mirrors.tencent.com/debian-archive/debian" \\
–mirror-chroot-security "http://mirrors.tencent.com/debian-archive/debian-security" \\
–mirror-binary "http://mirrors.tencent.com/debian-archive/debian" \\
–mirror-binary-security "http://mirrors.tencent.com/debian-archive/debian-security" \\
到这里,再次编译,之前报错的地方已经不在报错了,能编译一段时间,我当时真是特别激动,但是紧接着,又出现了错误:
当时真的特别崩溃,杀死人的不是挫折而是期待,但是我已经见到成功的曙光了,不能放弃,于是我又开始查错误。这里发现又出现了网址,但是我并没有在各个文件里看过这一串网址,于是我就要开始去找这个源在哪个文件里,根据查错的经验,这种源址一般放在source.list当中,但是这是debian的编译,所以我去debian\\ubuntu-build-service\\buster-desktop-arm64\\chroot\\etc\\apt 下找到了sources.list,果不其然,这里面只有一句话(没截图),就是上图报错的那一行的网址,我依旧是按照他的格式,改成腾讯镜像源的网址:
deb http://mirrors.tencent.com/debian-archive/debian buster main
再次编译,发现仍然报相同的错,我再次打开sources.list,发现他又变回去了,这是我就知道,肯定是有东西覆盖他了。所以我就在想,怎么保护他不被修改,去网上找了一些方法。第一个是给文件增加权限,这里就不介绍了,因为我没成功,我不知道那个方法对不对,当然也有可能修改文件的权限是sudo,我加权限也没用。
接着我就想看哪一步的时候修改了sources.list,于是我打开chroot,突然发现chroot文件夹里什么都没有了,这里我就知道,肯定是编译之前有删除的指令,把上次执行的东西全都删了,但是删了之后我又没办法修改sources.list了,所以我就重新执行了一遍编译,虽然他报错了,但是sources.list出现了。然后我就开始找,哪里有删除的指令,通过查看日志,发现一开始就有rm这种删除指令,那接下来就找那个文件里有这些删除指令
我首先想到的就是编译的脚本 build.sh和报错里的Makefile :33 recipe for target 'clean' failed,经过检查,build.sh里没啥问题,应该是调用makefile的时候产生的错误,并且已经找到了错误在第33行,于是我找到了makefile文件,地址为:
…..(SDK位置)\\debian\\ubuntu-build-service\\buster-desktop-arm64
内容如下:
这里有三行,都是删除指令,并且正好和日志的流程对上了,就是这里了。
但是我注意到,删除权限报错是在执行 rm -f config 之后出现的,所以我把33和35行都注释了。
再次编译!
成功啦!!!!!!!!并且可以成功打包
编译成功!
再次查看sources.list,没有被修改,但是我一开始为了保险起见,在同文件夹下的sources.list.d文件夹里也放了一个相同的sources.list,编译时也访问这个源,确保万无一失(虽然好像没用上,但是我怕大家有差错)
总结:
1.首先在configure文件里更改腾讯镜像源
2.编译一次。等待生成sources.list,报错是正常的。
3.修改sources.list文件,文件位置在上面有,并且在sources.list.d文件夹里也放了一个相同的sources.list,确保万无一失。
4. 修改Makefile,把33行和35行注释,就不覆盖sources.list了
5.再次编译,成功!
这是我第一次编写博客,因为网上的方法对我都没有帮助,如果对你有启发。请点个赞吧!
评论前必须登录!
注册