-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何在armbian里编译自定义驱动,添加自定义无线网卡驱动方法(How to compile custom drivers in armbian) #1043
Comments
你的日志已经说明原因了,当前Armbian系统内核是clang编译的,你使用gcc编译驱动,不兼容。 你可以自己编译Armbian内核,使用gcc编译好,替换到系统里。具体方法见 你也可以改驱动的源码,使用clang编译驱动。 |
https://github.com/ophub/amlogic-s9xxx-armbian/releases/tag/kernel_gcc12_headers 下载,解压,进入内核目录,armbian-update安装这个内核,再测试编译驱动。 |
刚刚更新到了最新版5.15.93了,是不是得倒退回去才能装? |
先在线更新换成其他内核,再手动上传到系统里,进入内核目录更新这个内核。 |
你的版本太底,升级编译工具包,或者用你自己的低版本编译工具编一个内核,armbian-kernel |
好的,仔细翻了下大神的文档,貌似可以在盒子上直接编译内核。正在尝试 |
要跑很长时间的编译,你装个tmux包,进入后台模式下执行编译过程。 amlogic-s9xxx-armbian/recompile Line 70 in 67c68ff
简单的方法是你升级你armbian的gcc软件包的版本到12.2,官方可以直接下载解压就能用: https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads 或者你非要用11,就把编译内核的脚本的工具链也改为11的,在 https://github.com/ophub/kernel/releases/tag/dev 里有11的下载,但是这种降级操作不推荐,有新的用新的。 |
感谢大佬!两个我都试试,学习一下。 再问个很蠢的问题,像这种驱动,我怎么加入到内核源码里一起编译了?有可能吗? |
这是添加r8168驱动到内核的案例。 |
哈哈哈魔百盒905l3a的盒子,编了3个多小时,然后发现和你给我的是一样的,我按照文档写了-t gcc,但是貌似会默认下载那个12.2的gnu toolchian gcc编译内核。所以我又把那个gnu toolchain gcc下载下来并且配置成默认gcc,终于编译驱动成功了! 我记录下我用的步骤,有其他小白看到了可以参考,大佬不要见笑。 按照顺序一行一行执行, 先编译内核,不想自己编译的可以直接下载o大编译好的
编译好/下载好之后,到找到对应的压缩包,解压 然后进入目录
更新内核 (默认会用本地目录下编译好的,如果你已经是最新的内核,先armbian-update -k 指定一个老内核倒退回去) 更新之后会自动重启,然后再ssh登录
最后那行就是让系统执行gcc命令的时候,调用arm gnu toolchain里的gcc而不是build-essentials里的老版本 然后就可以编译github上找到的其他驱动了。 再次感谢O大! |
恭喜你,你可能是在问题区里第一个反馈自己编译成功的人。 编译内核失败的日志里看就1个原因,使用的编译器不同。 我在内核仓库里5.15和6.1都是转存的f大编译的内核,他使用clang-14编译。但是大家在armbian里默认都是gcc-11,所以失败的日志提示,当前内核用的clang-14,而你是gcc-11。 解决办法就是统一编译器,把armbian里的编译工具更新到和安装的内核所用的版本一致了。 在仓库的内核编译脚本里可以选择使用gcc或clang编译。但是为了追求内核的极致性能,这2个编译器我都是定时跟着上游更新,一直保持使用最新版本(gcc是12,clang是14.0.6)。如果你的驱动要使用gcc编译,就到下载源里下载最新的gcc-12到armbian里,做好gcc编译工具的安装和链接,让编译内核时使用你安装的编译器。 |
@ophub 大佬,同步个新发现,我自己在盒子上编译的内核,装了之后可以编译了。刚在另外一个机器上试了你之前给的,不行,试了我自己用github action编译的也不行。。。把盒子A上编译好的换到盒子B里去装也可以,不知道啥区别了 |
安装在自己armbian盒子上用gcc编译的内核,肯定可以在这个armbian里用gcc编译驱动,因为编译工具是同一个。 在另外的盒子上安装我发的内核或者你Actions编译的内核,这2个都是使用x86_64交叉编译工具来编译的arm64内核,理论上是没问题的,只要你在armbian里设置gcc编译工具的$PATH有效,也是可以编译的。但是有些驱动的源码里写死了gcc,或者只支持在4.x/5.4等内核版本上使用,你在5.15或者6.1下就可能无法正常编译。一般来说版本跨度不大是可以调试成功的,根据错误去对应文件看代码,一点一点推。 |
不是的,我用armbian-kernel编译,会自动下载aarch64-none-elf-gcc,完了我编译驱动的时候也是用了这个,方法如我上面所述。简单说,一系列操作之后,提示都是 The kernel was built by: aarch64-none-elf-gcc (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 12.2.1 20221205 但是你给的那版内核,和我用github action编译的内核,都不能编译驱动,armbian-kernel编译的可以。 |
armbian-kernel编译的可以就是因为在armbian里编译内核使用的gcc,和你后面编译驱动使用的gcc是同一个,都是你下载安装到armbian里的那一个相同的gcc工具包。 clang可能是在5.12内核时开始了全面的支持,在内核编译脚本里有关于>5.12版本的区别对待,所以低于5.12.y的内核,建议使用gcc,在5.15里编译驱动时,比如前面发的那些f大添加到内核里的可以兼容新内核的驱动,我觉的用clang也可以编成功。 |
哦明白了。多谢!安全起见我还是盒子编译吧 |
armbian官方在编译固件和内核时,也是在ubuntu22.04(x86-64)下编译的,他的headers也是交叉编译的,所以交叉编译的内核应该是可以在armbian下编译驱动的,不是必须用armbian编译内核。 虽然你的测试结果是必须使用在armbian下编译的内核,但这是为什么呢? |
这就不懂了,还好两种方法都试了,不然我我把键盘砸烂了都搞不定 |
https://github.com/ophub/kernel/tree/main/pub/dev 我在dev目录下放了几个在armbian下使用gcc-12编译的内核,和在armbian-kernel里使用的编译工具相同。需要编译驱动的可以安装这里的内核测试是否可以正常编译。
版本可以根据仓库中的内核版本自己修改 |
测试了下编译 https://github.com/brektrou/rtl8821CU 驱动,5分钟还没结束,我ctrl+c结束了,应该是没什么问题。 |
O大真的是我们这些菜鸟玩家的救世主,考虑非常周到 |
O大,请教下我升级了你DEV里面的5.4.231内核,然后按这个步骤配置了GCC: mkdir /opt/gcc-aarch64-none-elf sudo tar xf arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xz --strip-components=1 -C /opt/gcc-aarch64-none-elf echo 'export PATH=$PATH:/opt/gcc-aarch64-none-elf/bin' | sudo tee -a /etc/profile.d/gcc-aarch64-none-elf.sh source /etc/profile ln -sf /opt/gcc-aarch64-none-elf/bin/aarch64-none-elf-gcc /usr/local/bin/gcc 最后编译这个8811的时候还是报错 |
你有这个设备?那个驱动仓库首页有说明,把相关依赖安装,按他的2种方法之一依次操作。 🌺 一键脚本: armbian-drive.zip 在安装dev里的内核后,可以使用 下载驱动: 会安装和 |
编译的时候 -t clang |
make -t clang 这样? |
这个帖子上面有说啊,gcc版本要升级到12 |
|
我最早做的就是升级到12了,早就升了,不行,放弃了。不弄了,太难了,请假两天弄一个无线网卡,心累。感谢,已经放弃这个系统了。 |
|
我是懒得截图直接用的题主的图片,没注意看题主的报错内容。 |
你现在的报错都不贴出来,也没人知道你到底是什么问题 |
我也贴不了了,系统都删了,盒子换成安卓了。一直都是报错“warning: the compiler differs from the one used to build the kernel”,一开始是GCC版本不对,我换了乌班图,结果是clang与GCC不兼容。之后我看到这个帖子又换回armbian,升级了GCC到12,成功升级了,但编译还是显示GCC版本不对,然后我就按楼上兄弟换了103内核,还是不行,可能系统都给我弄乱了。然后就不弄了,放弃。感谢,不弄了。 |
我不死心又重装了一遍,错误代码你帮我看看?感谢 make ARCH=arm64 CROSS_COMPILE= -C /lib/modules/5.15.109-ophub/build M=/root/src/8821cu-20210916 modules |
内核换成我给的103试试 |
make ARCH=arm64 CROSS_COMPILE= -C /lib/modules/5.15.103-ophub/build M=/root/src/8821cu-20210916 modules 驱动我安装的是下面这个网址的 我真的彻底无语了,心累 |
你这报错很明显啊,缺少一个命令,按照对应版本的命令 |
啥命令,小白不太懂,能解释一下吗 |
GLIBC_2.33' not found (required by scripts/basic/fixdep) scripts/basic/fixdep: /lib/aarch64-linux-gnu/libc.so.6: version GLIBC_2.34' not found (required by scripts/basic/fixdep) |
我系统自带2.31的,差那么一点点的版本也不行啊,非要2.33,我先试试升级到2.33看看 |
升级到2.34了还是不行,还是报错的一个字没变,心累啊。 大哥,推荐一个这个armbian免驱的无线网卡给我吧,我弄了两天都搞不定这个8822CU网卡的安装,这两天出去板砖都能赚好几百了,心累完。 |
这里报错似乎你还是使用的原本的gcc,只是升级到了12,而不是aarch64的那个gcc?
#1043 (comment) |
我用这个内核也编译成功了,非常感谢。从 kernel 库里下载编译好的和上面的一样提示 libc.so.6 缺失。 |
我用了这个内核还是编译不了 打个驱动也太难了 |
你解决了吗 |
可以使用这个,完美解决问题,如果没有的可以到armbian的固件取下载,O大仓库也有。
|
尝试用dkms安装这个无线驱动时
https://github.com/brektrou/rtl8821CU
出现
直接make编译的话,出现
求助下各位大佬,咋解决。同样的驱动在树莓派的raspberry OS里没有问题,可以编译。
The text was updated successfully, but these errors were encountered: