Closed xcray closed 2 years ago
上传分享一下你的dts,贴一下添加的代码部分。
蓝牙开启后,无线可以使用吗?
好的,大部分内容我上一个issue里都有了,这次的改动如下:
305:M401A:s905l3a:meson-g12a-u201.dtb:u-boot-e900v22c.bin:/lib/u-boot/u200-u-boot.bin.sd.bin:NA
rtk_hciattach -n -s 115200 ttyAML1 rtk_h5 &
可以添加到/etc/rc.local里rtk_hciattach源码来自:https://github.com/radxa/rtkbt (其中的驱动编译失败不会排错)
这是dts/dtb和rtk_hciattach文件: meson-g12a-u201.dtbdts.zip rtk_hciattach.zip
你的dtb是反编译的吧
https://github.com/unifreq/linux-5.15.y/blob/main/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts
这个是dts的源文件,你在标准文件上修改,可以随内核编译使用。
你的dtb是反编译的吧
https://github.com/unifreq/linux-5.15.y/blob/main/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts
这个是dts的源文件,你在标准文件上修改,可以随内核编译使用。
是的,反编译在本地只需要操作一个文件,简单能理解。 好像也可以直接兼容多个版本的内核。
直接在github上修改源码还不会。。。 好像还有个更好的办法是弄成overlay,也没整明白呢。
你反编译是改了一个什么值?
aliases里添加了一行:
aliases { serial1 = "/soc/bus@ffd00000/serial@24000"; };
serial@24000里: status = “okay”; pinctrl-0 = <0x55 0x56>; #指向uart-a-pins和uart-a-cts-rts-pins uart-has-rtscts; pinctrl-names = "default";。 aliases好像不是必须,其它3行似乎不可缺少,我没有试所有组合。
其它受芯片config下载失败问题误导试了几版,应该都没啥关系。
对了,我看过unifreq仓库里的源码,uart_A的定义是在g12-common.dtsi里,但status的值是“disabled”,要改的话这里才是关键吧。而且每个版本内核源码里都有(不知道有没有什么不同),是不是都得改?
我fork了5.18.y、尝试修改g12-common.dtsi并进行了内核编译,可行。 不过改这个文件会影响很多设备(引用这个文件的dts貌似有很多),估计上游大佬不会接受吧?其实很多盒子都是用这个串口接蓝牙,默认禁用似乎有点不近人情哈。
另一个方法是模仿e900v22c,在u200基础上另建一个dts; 更好的方法应该是弄成overlay的形式,需要的就加载。
今天帮一个网友成功启用了311-1a yst (yss) (使用e900v22c.dtb)的蓝牙,方法一样,也是反编译dtb编辑dts打开串口再编译回去。因为他的盒子蓝牙同样是uart接口的,也是同一个串口,serial@ffd24000。我估计所有蓝牙采用串口的盒子都可以用这个方法把蓝牙用起来。
https://github.com/ophub/linux-5.15.y/commit/8559e5b949e84553f3208fafedf0c90dd4f171d6
https://github.com/ophub/amlogic-s9xxx-armbian/issues/476
像这个明确就很好添加蓝牙,你这个的原始代码是什么呢?有同型号的其他dtb可以参照下吗?
我上面几个comment已经交待了,您可能事多给忘了,再返回去看看?关键就是uaert_A默认是disabled(在那个g12-common里),修改dts把它打开就行了。也看过其它几个dts文件,realtek芯片需要自己的rtk_hciattach程序attach一下,其它芯片好像直接在dts里加上就行。
https://bbs.hassbian.com/thread-17392-1-1.html 简单总结一下启用串口蓝牙电路的要点:
认识自己的硬件,蓝牙芯片、接口,安卓系统是一个比较可靠的地方,其次是网文;
换用启用了串口uart_A的dtb,网上找或自己编译;原来的dtb默认都是禁用了这个串口。换dtb后ls /dev/tty*确认串口已出现在系统里。比如ttyAML1;
蓝牙芯片型号对应的固件,比如rtl8761btv的固件有两个文件:rtl8761b_fw和rtl_8761b_config,都保存至/lib/firmware/rtlbt目录下。固件有很多版本,自己试出最好用的来。其中config对应不同速率,比较坑,需谨慎选择,有的会不能用、有的不太稳定;用于ha获取传感器数据的,推荐115200或230400速率的,有音乐播放需求的,推荐2m速率的。
每次系统启动,都需要用hciattach完成初始化(包括固件下载至蓝牙芯片),rtl串口蓝牙只能用自家的rtk_hciattach完成(我编译好的已多处上传,有源码自己编译也行),其它品牌的串口蓝牙使用bluez自带的hciattach基本都没问题。 命令:
rtk_hciattatch -n -s 115200 ttyAML1 rtk_h5 &
以上为必须、以下为可选:
gpiod软件包,用apt安装即可。其中的gpioset用来重置蓝牙电路,否则不断电重启后无法继续使用(rtk_hciattach初始化失败)。标题里两种盒子gpio编号都是0 82,置0关闭1秒后置1打开,完成重置。 关闭和打开的命令分别为: gpioset -s 1 -m time 0 82=0 gpioset 0 82=1
把gpioset命令和rtk_hciattach命令添加到/etc/rc.local,自动执行。更好的方式应该是通过rf_kill自动完成,但好像涉及到驱动和内核的编译,我能力不够不会弄。
大部分使用串口蓝牙芯片的盒子尤其是realtek芯片的,都可以参考。 我用的rtk_hciattach源码来自radxa,比较坑的是这个repo包含的固件config文件是1.5m速率的,我的两个盒子都用不了。