整理下移植思路

本文详细记录了解决海思平台X11驱动安装问题的过程,包括使用RPM包安装驱动,理解架构差异导致的问题,以及最终通过复制和修改配置文件成功解决问题的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  查阅海思SDK,寻找拷贝加载LINUX内核和ROOTFS的方法。

2  因为架构相同,偷懒使用PANDA的ROOTFS,发现ROOTFS容积达到1 G,放弃制作YAFFS2文件系统拷贝至NAND FLASH的方法。

3  海思SDK,没有准确提供从LOADER通过NFS方式挂在ROOTFS的方法,只提供了常规的NFS MOUNT方法。

4  选择一,从Loader启动,暂没做。

5  选择二,借鉴PANDA的方法,利用CHROOT来得到ROOTFS。转换脚本借鉴PANDA。(有怀疑的空间)

6  通过步骤5 ,海思平台正常启动内核和ROOTFS。

7 修改转换脚本,挂载MEEGO-ROOTFS至 /MNT,同时注意相关/dev/ /proc目录的挂载。

8 chroot /mnt /bin/bash

9 海思平台启用了telnet,可以telnet至平台,提供了很好的调试输出方式。尤其是chroot后,telnet 登录的是原来的海思ROOTFS,方便使用MEEGO-ROOTFS下没有的命令。

10 直接调用startx,启动X11。遇到问题,查看/var/log/Xorg.0.log

11  找不到/dev/tty0 ,使用各种方法,ln -s /dev/tty /dev/tty0 或者是mknod 来创建/dev/tty0。但是后续运行startx会弹出  cannot find free vt

12  发现X11加载的是omapfb,查找各种X11的配置,基本上认为是配置的问题,但是没有X11 FB驱动。查看PANDA移植MEEGO的WIKI,发现的确对xorg.conf.d做了修改,但是搞不懂为什么拷贝过去的配置文件和生成的配置文件不同(可能是mic做了转化处理)

13 查看生成ROOTFS的KS文件,从里面找到下载软件包的链接地址,从里面找到FB RPM包。xorg-x11-drv-fbdev-0.4.1-1.5.armv7hl.rpm

14 xorg-x11-drv-fbdev-0.4.1-1.5.armv7hl.rpm包在UBUNTU下不能安装,因为架构不同,找不到依赖库。(想了想,MIC工具应该对此做了处理,不然那些RPM包都安装不到ROOTFS中,怎么实现的还没研究)

15 查看到MEEGO-ROOTFS下有rpm命令,决定到盒子上安装包。rpm -ivh xorg-x11-drv-fbdev-0.4.1-1.5.armv7hl.rpm 没有错误,想当然的以为安装成功。忘了查看安装之前的动态库,以为libfb.so或者libfbdevhw.so是FB驱动库,这里傻逼了,创建时间都没看。修改配置文件,折腾了很久,发现都找不到驱动。

16 还没想到是驱动没安装成功的原因,以为未知的地方出了问题,沮丧开始了。只好随便在网上查查有没有相关xorg-x11-drv-fbdev的消息和UBUNTU下的X11配置,发现X86版本安装FB驱动会生成FB_DRV.SO库。想到是不是可以RPM命令查看一下rpm包里面包含哪些文件。

17 rpm -pl  xorg-x11-drv-fbdev-0.4.1-1.5.armv7hl.rpm 果然里面有两个文件。但是为什么安装不成功呢,rpm -e卸载包也不成功,说明meego rpm配置有问题(一种可能是因为没有使用步骤4的原因),不知道怎么办,想到是不是可以用MIC重新编译一个ROOTFS,但是这个风险也太大,万一重新下载包覆盖以前下好的包,就太恶心了。

18 峰回路转,突然发现 海思的rootfs中也有RPM命令(如果没有,说不定可以自己编译一个)。使用rpm -i org-x11-drv-fbdev-0.4.1-1.5.armv7hl.rpm 什么log都没,但是在相关的目录下找到了驱动库。很高兴,拷贝到MEEGO-ROOTFS。

19 修改配置,这次LOG中终于显示加载的是FB驱动。但是悲剧的是又回到了步骤11 ,悲剧了。 现在猜测可能是没有选择4步骤的原因,等等再调研下有没有其他方法,真麻烦。


<think>好的,我现在需要帮助用户了解如何将BlueZ蓝牙协议栈移植到其他平台或操作系统。首先,用户的问题涉及到BlueZ的移植教程、目标平台和兼容性配置。我需要先理解BlueZ的基本情况以及移植的一般步骤。 根据用户提供的引用内容,BlueZ在版本5之后移除了对音频的支持,需要配合第三方音频服务如PulseAudio。这可能意味着在移植过程中,特别是涉及音频功能时,需要额外处理这部分依赖。另外,用户提到的引用[1]说明蓝牙协议栈的核心作用,所以在移植时必须确保协议栈各层能够正确配合目标平台的硬件和操作系统。 首先,我应该考虑移植BlueZ的基本步骤。通常,移植开源项目到新平台需要交叉编译工具链、依赖库的处理、配置选项的调整等。BlueZ依赖的库可能包括GLib、DBus等,这些库在目标平台上是否可用,或者是否需要一起移植? 然后,目标平台的兼容性配置需要根据不同的操作系统进行调整。例如,如果目标平台是嵌入式Linux,可能需要针对特定的内核版本和硬件驱动进行适配。如果目标平台是非Linux系统,可能需要更多的修改,因为BlueZ主要是为Linux设计的。 接下来,用户可能关心具体操作步骤,比如如何配置构建系统,如何处理依赖项,如何测试移植后的功能。此外,还需要考虑蓝牙硬件的兼容性,比如使用的蓝牙芯片是否需要特定的驱动或固件。 另外,用户提到的引用[2]提到需要安装Pulseaudio以支持蓝牙音频,因此在移植BlueZ之后,可能需要配置Pulseaudio或其他音频服务,确保音频功能正常工作。这部分可能需要额外的配置步骤,比如确保DBus通信正常,Pulseaudio插件正确安装。 现在需要整理这些思路,分步骤说明移植过程,包括环境准备、依赖处理、配置编译、安装测试等。同时要提到不同目标平台可能遇到的问题,比如内核配置、硬件支持、依赖库版本等。还要强调兼容性配置,比如修改BlueZ的配置文件,调整协议栈参数以适应目标硬件。 可能还需要参考BlueZ的官方文档或社区资源,确保步骤的准确性。如果有常见的错误或问题,也应该提及解决方法,比如依赖缺失时的处理,或内核模块未加载的情况。 总结起来,回答需要结构清晰,分步骤讲解移植流程,涵盖环境准备、依赖安装、配置编译、安装测试、音频支持配置等,同时讨论目标平台的兼容性问题,并提供实际例子或参考命令。确保用户能够按照步骤操作,并理解可能遇到的挑战及解决办法。</think>### BlueZ蓝牙协议栈移植教程 #### **1. 环境准备与依赖处理** - **目标平台要求** BlueZ主要面向Linux系统,需确保目标平台具备以下条件: - Linux内核版本≥2.4.6(推荐≥4.x)[^2] - 支持DBus通信框架 - 安装GLib(≥2.28)、libical等依赖库 - 若需音频功能,需额外部署Pulseaudio(≥11.1) - **交叉编译工具链配置** 若目标平台为嵌入式设备(如ARM架构),需配置交叉编译器: ```bash export CC=arm-linux-gnueabihf-gcc export LD=arm-linux-gnueabihf-ld ``` #### **2. 源码获取与配置** - 下载BlueZ源码(如5.50版本): ```bash wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.50.tar.xz tar -xvf bluez-5.50.tar.xz cd bluez-5.50 ``` - **关键配置选项**: ```bash ./configure --host=arm-linux-gnueabihf \ --prefix=/opt/bluez \ --disable-systemd \ --enable-library ``` 需根据目标平台调整`--host`和`--prefix`参数,禁用无关功能(如`--disable-systemd`)。 #### **3. 编译与安装** - 执行编译并安装到指定目录: ```bash make -j4 && make install ``` 生成的二进制文件位于`/opt/bluez/sbin`,库文件在`/opt/bluez/lib`。 #### **4. 目标平台兼容性配置** - **内核支持** 确保内核启用蓝牙子系统: ```bash CONFIG_BT=y CONFIG_BT_RFCOMM=y CONFIG_BT_BNEP=y ``` 若使用USB蓝牙适配器,需加载`btusb`模块: ```bash modprobe btusb ``` - **DBus服务配置** 创建BlueZ的DBus配置文件`/etc/dbus-1/system.d/bluetooth.conf`: ```xml <policy user="root"> <allow own="org.bluez"/> <allow send_interface="org.bluez.Agent1"/> </policy> ``` #### **5. 音频支持集成** 若需蓝牙音频,需额外部署Pulseaudio并启用蓝牙模块: ```bash pactl load-module module-bluetooth-discover ``` 配置Pulseaudio的蓝牙策略文件,确保与BlueZ的交互权限。 #### **6. 测试与验证** - 启动蓝牙守护进程: ```bash bluetoothd -n -d ``` - 使用`bluetoothctl`扫描设备: ```bash [bluetooth]# scan on ``` #### **常见问题与解决** - **依赖库缺失**:通过`ldd`检查二进制文件依赖,补充目标平台的库文件。 - **DBus通信失败**:检查DBus服务状态与策略文件权限。 - **音频无输出**:确认Pulseaudio插件加载,检查`/etc/pulse/system.pa`配置[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值