diff --git "a/documents/images/\344\270\262\345\217\243\350\276\223\345\207\272.png" "b/documents/images/\344\270\262\345\217\243\350\276\223\345\207\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..f7158c09b67084e1badd63f1cffac3b4bd2287ca Binary files /dev/null and "b/documents/images/\344\270\262\345\217\243\350\276\223\345\207\272.png" differ diff --git "a/documents/images/\345\206\231\345\205\245SD.png" "b/documents/images/\345\206\231\345\205\245SD.png" index 1b6a9912f327b2b941acede84e68cc9b0b6cea82..808ce926c731befbe85601bb126493ac1720c89d 100644 Binary files "a/documents/images/\345\206\231\345\205\245SD.png" and "b/documents/images/\345\206\231\345\205\245SD.png" differ diff --git "a/documents/images/\346\240\274\345\274\217\345\214\226\345\211\215.png" "b/documents/images/\346\240\274\345\274\217\345\214\226\345\211\215.png" deleted file mode 100644 index cad20bf482494b6dbf8d8188694fa025bb22bc1f..0000000000000000000000000000000000000000 Binary files "a/documents/images/\346\240\274\345\274\217\345\214\226\345\211\215.png" and /dev/null differ diff --git "a/documents/images/\346\240\274\345\274\217\345\214\226\345\220\216.png" "b/documents/images/\346\240\274\345\274\217\345\214\226\345\220\216.png" deleted file mode 100644 index 7f927c498f2880b1d475f9c2b0a9b54d904462f8..0000000000000000000000000000000000000000 Binary files "a/documents/images/\346\240\274\345\274\217\345\214\226\345\220\216.png" and /dev/null differ diff --git "a/documents/\344\272\244\345\217\211\347\274\226\350\257\221\345\206\205\346\240\270.md" "b/documents/\344\272\244\345\217\211\347\274\226\350\257\221\345\206\205\346\240\270.md" index b0e8499113078fb0fe74fb3e84f5cbb7d7889272..3606e393e41cd505393cee2fc27475b1b34fc73e 100644 --- "a/documents/\344\272\244\345\217\211\347\274\226\350\257\221\345\206\205\346\240\270.md" +++ "b/documents/\344\272\244\345\217\211\347\274\226\350\257\221\345\206\205\346\240\270.md" @@ -13,8 +13,6 @@ - [创建编译内核模块目录](#创建编译内核模块目录) - [编译内核模块](#编译内核模块) - [收集编译结果](#收集编译结果) - - [内核](#内核) - - [设备树文件等](#设备树文件等) - [验证内核可用性](#验证内核可用性) - [将内核模块放进rootfs](#将内核模块放进rootfs) - [将内核放进引导](#将内核放进引导) @@ -85,17 +83,17 @@ ## 收集编译结果 -### 内核 +1. 内核 + + `cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/Image ${WORKDIR}/output/` -`cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/Image ${WORKDIR}/output/` +2. 设备树文件等 -### 设备树文件等 + `cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output/` -`cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output/` + `mkdir ${WORKDIR}/output/overlays` -`mkdir ${WORKDIR}/output/overlays` - -`cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/overlays/*.dtb* ${WORKDIR}/output/overlays/` + `cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/overlays/*.dtb* ${WORKDIR}/output/overlays/` 至此,所有内核及内核模块相关内容都在 ${WORKDIR}/output 下了。 diff --git "a/documents/\345\210\267\345\206\231\351\225\234\345\203\217.md" "b/documents/\345\210\267\345\206\231\351\225\234\345\203\217.md" index b48bea00c071a67dec82af9dab497a78a1d5547f..39c65c23475aaa7248fcac816883023a68c8739b 100644 --- "a/documents/\345\210\267\345\206\231\351\225\234\345\203\217.md" +++ "b/documents/\345\210\267\345\206\231\351\225\234\345\203\217.md" @@ -22,13 +22,11 @@ - Windows10/Linux/Mac - 树莓派 3B/3B+/4B -- 16G 以上的 Micro SD 卡 +- 8G 及以上的 Micro SD 卡 # 获取树莓派 img 镜像 -下载适配树莓派的最新 openEuler 镜像,下面以 `XXX.img` 表示该镜像。 - -注意!如果下载的是压缩后的镜像,需要先将压缩文件解压得到 img 格式的镜像文件。 +下载适配树莓派的最新 openEuler 镜像,下面以获取 `openEuler-20.03-LTS-aarch64-raspi.img.xz` 镜像为例。 # 刷写 SD 卡 @@ -38,85 +36,95 @@ ### 格式化 SD 卡 -下载应用:SDFormater,用于格式化 SD 卡。 - -若 SD 卡之前未安装过镜像,盘符只有一个,SDFormater 应用中选择 SD 卡对应盘符,直接格式化即可; +请按照以下步骤格式化 SD 卡: -若 SD 卡之前安装过镜像,盘符会有多个,如下图所示,该 SD 卡对应三个盘符:E、G、H,SDFormater 应用中选择 SD 卡对应 boot 分区盘符 E,格式化即可。 +1. 下载并安装格式化 SD 卡工具,以下操作以 SD Card Formatter 格式化工具为例。 +2. 打开 SD Card Formatter,在 `Select card` 中选择需要格式化的 SD 卡的盘符。 -![](images/盘符.jpg) + 若 SD 卡之前未安装过镜像,盘符只有一个。在 `Select card` 中选择需要格式化的 SD 卡对应盘符。 -![](images/格式化前.png) + 若 SD 卡之前安装过镜像,盘符会有一个或多个。如下图所示,该 SD 卡对应三个盘符:E、G、H。在 `Select card` 中选择需要格式化的 SD 卡对应 boot 分区盘符 E。 -![](images/格式化后.png) + ![](images/盘符.jpg) -![](images/格式化后盘.png) +3. 在 `Formatting options` 中选择格式化方式。默认为 `Qick format`。 +4. 单击 `Format` 开始格式化。界面通过进度条显示格式化进度。 +5. 格式化完成后会弹出 `Formatting was successfully completed` 的提示框,单击 `确定` 完成格式化。 + + 如下图所示,格式化后 SD 卡的盘符只有一个。 + + ![](images/格式化后盘.png) ### 写入 SD 卡 -下载应用:Win32 Disk Imager。 - -右键选择“以管理员身份运行”,打开 Win32 Disk Imager,选择镜像 img 文件和待写入的 SD 卡,点击【写入/Write】。 +>![](public_sys-resources/icon-notice.gif) **须知:** +>如果获取的是压缩后的镜像文件 `openEuler-20.03-LTS-aarch64-raspi.img.xz`,需要先将压缩文件解压得到 `openEuler-20.03-LTS-aarch64-raspi.img` 镜像文件。 -![](images/写入SD.png) +请按照以下步骤将 img 格式的镜像文件写入 SD 卡: -写入完成即可。 +1. 下载并安装刷写镜像的工具,以下操作以 Win32 Disk Imager 工具为例。 +2. 右键选择“以管理员身份运行”,打开 Win32 Disk Imager。 +3. 选择镜像 img 文件。 +4. 选择待写入的 SD 卡盘符。 +5. 单击“写入”。如下图所示,界面通过任务进度条显示写入 SD 卡的进度。 + + ![](images/写入SD.png) -写入成功后,SD 卡自动分区后的盘符为三个,如下图所示。 - -![](images/盘符.jpg) +6. 写入完成后会弹出 “写入成功” 的提示框,单击“OK”完成写入。 + + 如下图所示,写入成功后,SD 卡自动分区后的盘符为三个。 + + ![](images/盘符.jpg) ## Linux 环境 ### 查看磁盘分区信息 -`fdisk -l` - -获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/sdb。 +执行 `fdisk -l` 获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/sdb。 ### 卸载 SD 卡挂载点 -查看当前已挂在的卷 - -`df -lh` +1. 执行 `df -lh` 命令查看当前已挂载的卷。 +2. 如果 SD 卡对应的分区未挂载,则跳过该步骤;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/sdb1 和 /dev/sdb3 已挂载,则需要卸载对应分区,执行以下命令: -如果 SD 卡对应的分区未挂载,则该步骤跳过;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/sdb1 和 /dev/sdb3 已挂载,则需要卸载对应分区: + `umount /dev/sdb1` -`umount /dev/sdb1` - -`umount /dev/sdb3` + `umount /dev/sdb3` ### 写入 SD 卡 -将下载的镜像 `XXX.img` 刷入 SD 卡。 +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.03-LTS-aarch64-raspi.img.xz` 命令将压缩文件解压得到 `openEuler-20.03-LTS-aarch64-raspi.img` 镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.03-LTS-aarch64-raspi.img` 刷写入 SD 卡,执行以下命令: + + `dd bs=4M if=openEuler-20.03-LTS-aarch64-raspi.img of=/dev/sdb` -`dd bs=4M if=XXX.img of=/dev/sdb` + >![](public_sys-resources/icon-note.gif) **说明:** + >一般情况下,将块大小设置为 4M。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1M 重新写入,但是设置为 1M 比较耗时。 ## Mac 环境 ### 查看磁盘分区信息 -`diskutil list` - -获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/disk3。 +执行 `diskutil list` 获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/disk3。 ### 卸载 SD 卡挂载点 -查看当前已挂在的卷 - -`df -lh` +1. 执行 `df -lh` 命令查看当前已挂载的卷。 +2. 如果 SD 卡对应的分区未挂载,则跳过该步骤;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/disk3s1 和 /dev/disk3s3 已挂载,则需要卸载对应分区,执行以下命令: -如果 SD 卡对应的分区未挂载,则该步骤跳过;如果 SD 卡对应分区已挂载,如 SD 卡对应的两个分区 /dev/sdb1 和 /dev/sdb3 已挂载,则需要卸载对应分区: + `diskutil umount /dev/disk3s1` -`diskutil umount /dev/sdb1` - -`diskutil umount /dev/sdb3` + `diskutil umount /dev/disk3s3` ### 写入 SD 卡 -将下载的镜像 `XXX.img` 刷入 SD 卡。 +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.03-LTS-aarch64-raspi.img.xz` 命令将压缩文件解压得到 `openEuler-20.03-LTS-aarch64-raspi.img` 镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.03-LTS-aarch64-raspi.img` 刷入 SD 卡,执行以下命令: + + `dd bs=4m if=openEuler-20.03-LTS-aarch64-raspi.img of=/dev/sdb` -`dd bs=4m if=XXX.img of=/dev/sdb` + >![](public_sys-resources/icon-note.gif) **说明:** + >一般情况下,将块大小设置为 4m。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1m 重新写入,但是设置为 1m 比较耗时。 # 树莓派使用 diff --git "a/documents/\346\240\221\350\216\223\346\264\276\344\275\277\347\224\250.md" "b/documents/\346\240\221\350\216\223\346\264\276\344\275\277\347\224\250.md" index 9b9f6839cf434f4da63637a36fef8b7acf888a18..85b34ec381e2f4cbb505be39438119da6abc31f6 100644 --- "a/documents/\346\240\221\350\216\223\346\264\276\344\275\277\347\224\250.md" +++ "b/documents/\346\240\221\350\216\223\346\264\276\344\275\277\347\224\250.md" @@ -4,18 +4,9 @@ - [根目录分区扩展](#根目录分区扩展) - [查看磁盘分区信息](#查看磁盘分区信息) - [分区扩容](#分区扩容) - - [操作磁盘 /dev/mmcblk0](#操作磁盘-devmmcblk0) - - [查看当前分区情况](#查看当前分区情况) - - [删除分区 /dev/mmcblk0p3](#删除分区-devmmcblk0p3) - - [选择要删除的分区序号](#选择要删除的分区序号) - - [创建新的分区](#创建新的分区) - - [选择创建分区类型](#选择创建分区类型) - - [选择要创建的分区序号](#选择要创建的分区序号) - - [输入新分区的起始扇区号](#输入新分区的起始扇区号) - - [输入新分区的终止扇区号](#输入新分区的终止扇区号) - - [是否修改扇区标记](#是否修改扇区标记) - - [保存并退出](#保存并退出) - - [增大未加载的文件系统大小](#增大未加载的文件系统大小) + - [查看扩容后磁盘分区信息](#查看扩容后磁盘分区信息) + - [增大未加载的文件系统大小](#增大未加载的文件系统大小) + - [查看磁盘空间信息](#查看磁盘空间信息) - [wifi 连接](#wifi-连接) - [查看 IP 和网卡信息](#查看-ip-和网卡信息) - [扫描可以连接的 wifi 信息](#扫描可以连接的-wifi-信息) @@ -33,20 +24,8 @@ - [开启蓝牙](#开启蓝牙) - [查看蓝牙设备](#查看蓝牙设备) - [连接蓝牙](#连接蓝牙) - - [进入交互命令](#进入交互命令) - - [开启控制器电源](#开启控制器电源) - - [启用代理](#启用代理) - - [设置代理为默认代理](#设置代理为默认代理) - - [扫描](#扫描) - - [配对](#配对) - - [添加信任](#添加信任) - - [连接](#连接) - [播放音乐](#播放音乐) - [文件传输](#文件传输) - - [下载软件 obexftp](#下载软件-obexftp) - - [安装 obexftp](#安装-obexftp) - - [查看文件传输的 channel](#查看文件传输的-channel) - - [传输文件](#传输文件) - [GPIO](#gpio) - [简介](#简介) - [UART](#uart) @@ -54,20 +33,8 @@ - [串口通信](#串口通信) - [蓝牙使用 PL011 UART,禁用串口](#蓝牙使用-pl011-uart禁用串口) - [蓝牙使用 PL011 UART,串口使用 mini UART](#蓝牙使用-pl011-uart串口使用-mini-uart) - - [编辑配置文件](#编辑配置文件) - - [设置 hciuart 服务开机启动(默认已设置)](#设置-hciuart-服务开机启动默认已设置) - - [重启树莓派](#重启树莓派) - - [查看结果](#查看结果) - [禁用蓝牙,串口使用 PL011 UART](#禁用蓝牙串口使用-pl011-uart) - - [编辑配置文件](#编辑配置文件-1) - - [取消 hciuart 服务开机启动](#取消-hciuart-服务开机启动) - - [重启树莓派](#重启树莓派-1) - - [查看结果](#查看结果-1) - [蓝牙使用 mini UART,串口使用 PL011 UART](#蓝牙使用-mini-uart串口使用-pl011-uart) - - [编辑配置文件](#编辑配置文件-2) - - [设置 hciuart 服务开机启动(默认已设置)](#设置-hciuart-服务开机启动默认已设置-1) - - [重启树莓派](#重启树莓派-2) - - [查看结果](#查看结果-2) - [WiringPi](#wiringpi) - [下载 WiringPi](#下载-wiringpi) - [安装 WiringPi](#安装-wiringpi) @@ -105,87 +72,86 @@ 默认根目录分区空间比较小,在使用之前,需要对分区进行扩容。 - ## 查看磁盘分区信息 -`fdisk -l` - -获取 SD 卡磁盘信息,例如 SD 卡对应磁盘为 /dev/mmcblk0。openEuler 镜像包括 3 个分区,分别为 - -- 引导分区 /dev/mmcblk0p1 -- 交换分区 /dev/mmcblk0p2 -- 根目录分区 /dev/mmcblk0p3 - -这里我们需要将根目录分区进行扩容。 - -## 分区扩容 - -### 操作磁盘 /dev/mmcblk0 - -`fdisk /dev/mmcblk0` - -### 查看当前分区情况 - -`p` - -记录下分区 /dev/mmcblk0p3 的起始扇区号,这里记为 `xxx`,本例中实际为 `1593344`。 - -### 删除分区 /dev/mmcblk0p3 +执行 `fdisk -l` 命令查看磁盘分区信息。命令和回显如下: -`d` - -### 选择要删除的分区序号 - -回车(默认为 3)或 输入 `3` - -### 创建新的分区 - -`n` - -### 选择创建分区类型 - -回车(默认为 p)或 输入 `p` - -### 选择要创建的分区序号 +``` +# fdisk -l +Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes +Disklabel type: dos +Disk identifier: 0xf2dc3842 -回车(默认为 3)或 输入 `3` +Device Boot Start End Sectors Size Id Type +/dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) +/dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris +/dev/mmcblk0p3 1593344 5044223 3450880 1.7G 83 Linux +``` -### 输入新分区的起始扇区号 +SD 卡对应盘符为 /dev/mmcblk0,包括 3 个分区,分别为 -注意!!!不要直接输入回车或使用默认参数。这是需要输入删除分区 /dev/mmcblk0p3 之前查看到的的起始扇区号,上面记为 `xxx`,本例中实际为 `1593344`。 +- /dev/mmcblk0p1:引导分区 +- /dev/mmcblk0p2:交换分区 +- /dev/mmcblk0p3:根目录分区 -`xxx` +这里我们需要将根目录分区 `/dev/mmcblk0p3` 进行扩容。 +## 分区扩容 -### 输入新分区的终止扇区号 +执行 `fdisk /dev/mmcblk0` 命令进入到交互式命令行界面,按照以下步骤扩展分区,如下图所示。 -回车 +1. 输入 `p`,查看分区信息。 + + 记录分区 `/dev/mmcblk0p3` 的起始扇区号,即 `/dev/mmcblk0p3` 分区信息中 `Start` 列的值,示例中为 `1593344`。 -取默认的最后一个扇区号。 +2. 输入 `d`,删除分区。 +3. 输入 `3` 或直接按 `Enter`,删除序号为 `3` 的分区,即 `/dev/mmcblk0p3` 分区。 +4. 输入 `n`,创建新的分区。 +5. 输入 `p` 或直接按 `Enter`,创建 `Primary` 类型的分区。 +6. 输入 `3` 或直接按 `Enter`,创建序号为 `3` 的分区,即 `/dev/mmcblk0p3` 分区。 +7. 输入新分区的起始扇区号,即第 `1` 步中记录的起始扇区号,示例中为 `1593344`。 -### 是否修改扇区标记 + >![](public_sys-resources/icon-notice.gif) **须知:** + >请勿直接按“Enter”或使用默认参数。 -`N` +8. 按 `Enter`,使用默认的最后一个扇区号作为新分区的终止扇区号。 +9. 输入 `N`,不修改扇区标记。 +10. 输入 `w`,保存分区设置并退出交互式命令行界面。 -不修改。 + ![](images/分区扩容.png) -### 保存并退出 +## 查看扩容后磁盘分区信息 -`w` +执行 `fdisk -l` 命令查看磁盘分区信息,以确保磁盘分区正确。命令和回显如下: + +``` +# fdisk -l +Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes +Disklabel type: dos +Disk identifier: 0xf2dc3842 -该操作结束后,使用 `fdisk -l` 命令可以看到 /dev/mmcblk0p3 大小已经扩展。但是通过 `df -lh` 可以看到根目录大小没有变化。 +Device Boot Start End Sectors Size Id Type +/dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) +/dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris +/dev/mmcblk0p3 1593344 31116287 29522944 14.1G 83 Linux +``` -### 增大未加载的文件系统大小 +## 增大未加载的文件系统大小 `resize2fs /dev/mmcblk0p3` -如果该命令失败,可通过命令 `reboot` 重启树莓派之后再执行 `resize2fs /dev/mmcblk0p3`。 - -该操作结束后,通过 `df -lh` 可以看到根目录大小已经扩展。 - -至此,根目录分区扩容结束。扩容过程见下图: +## 查看磁盘空间信息 -![](images/分区扩容.png) +执行 `df -lh` 命令查看磁盘空间信息,以确保根目录分区已扩展。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>如果根目录分区未扩展,可执行 `reboot` 命令重启树莓派之后再执行 `resize2fs /dev/mmcblk0p3`。 # wifi 连接 @@ -323,129 +289,124 @@ hci0: Type: Primary Bus: UART ## 连接蓝牙 -使用 `bluetoothctl` 交互命令连接蓝牙设备。 - -### 进入交互命令 - -`bluetoothctl` - -### 开启控制器电源 +执行 `bluetoothctl` 命令进入到交互式命令行界面,按照以下步骤连接蓝牙设备。 -`power on` +1. 输入 `power on` 开启控制器电源。 +2. 输入 `agent on` 启用代理。 +3. 输入 `default-agent` 设置默认代理连接。 +4. 输入 `scan on` 搜索周边蓝牙设备。 + + 这里看到要连接的目标蓝牙设备对应的 MAC 地址,记为 `target-MAC`。 -### 启用代理 +5. 输入 `pair target-MAC` 配对目标蓝牙设备。 -`agent on` + 这里,可能会出现的问题: -### 设置代理为默认代理 + 1. Failed to pair: org.bluez.Error.AuthenticationCanceled -`default-agent` + 解决:多次配对后仍然提示该错误,请重启 bluetooth 服务。 -### 扫描 + ``` + systemctl restart bluetooth + ``` + +6. 输入 `trust target-MAC` 信任目标蓝牙设备。 + + 这一步可忽略。 -`scan on` +7. 输入 `connect target-MAC` 连接目标蓝牙设备。 -这里看到要连接的蓝牙设备对应的 MAC 地址,记为 `target-MAC`。 + 连接成功后,则会在该交互式命令行界面显示进入到目标蓝牙设备。 -### 配对 + 这里,可能会出现的问题: -`pair target-MAC` + 1. Attempting to connect to XX:XX:XX:XX:XX:XX + Failed to connect: org.bluez.Error.Failed -### 添加信任 + 解决:重启 pluseaudio。 -这一步可忽略。 + ``` + pulseaudio -k + pulseaudio --start + ``` + 如果重启多次仍然无效。在 `bluetoothctl` 交互命令中删除对应蓝牙设备信息:`remove target-MAC`,然后按照 `pair`、`trust`、`connect` 的过程连接蓝牙。 -`trust target-MAC` +## 播放音乐 -### 连接 +`target-MAC` 对应的设备上`设置->蓝牙`会显示已经连接到树莓派的蓝牙设备。该设备播放音乐,就可以通过树莓派收听。 -`connect target-MAC` +>![](public_sys-resources/icon-notice.gif) **须知:** +>要保证树莓派已经开启音频。 -连接成功,则会在该交互命令界面显示进入到目标蓝牙设备。 +## 文件传输 -这里,可能会出现的问题: +按照以下步骤通过蓝牙传输文件。 -1. Attempting to connect to XX:XX:XX:XX:XX:XX -Failed to connect: org.bluez.Error.Failed +1. 下载软件 obexftp - 解决:重启 pluseaudio。 + 需要下载三个包:lib64obexftp、lib64openobex、obexftp,可在 [地址](https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/) 下载其最新版本。以我们下载时对应版本为例,执行以下命令: ``` - pulseaudio -k - pulseaudio --start + wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/lib64obexftp0-0.24-17.mga8.aarch64.rpm + wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/lib64openobex1-1.7.2-3.mga8.aarch64.rpm + wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/obexftp-0.24-17.mga8.aarch64.rpm ``` - 如果重启多次仍然无效。在 `bluetoothctl` 交互命令中删除对应蓝牙设备信息:`remove target-MAC`,然后按照 `pair`、`trust`、`connect` 的过程连接蓝牙。 - -## 播放音乐 - -`target-MAC` 对应的设备上`设置->蓝牙`会显示已经连接到树莓派的蓝牙设备。该设备播放音乐,就可以通过树莓派收听。注意,需要保证树莓派已经开启音频。 -## 文件传输 +2. 安装 obexftp,执行以下命令: -### 下载软件 obexftp - -需要下载三个包:lib64obexftp、lib64openobex、obexftp,可在 [地址](https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/) 下载其最新版本。以我们下载时对应版本为例: - -``` -wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/lib64obexftp0-0.24-17.mga8.aarch64.rpm -wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/lib64openobex1-1.7.2-3.mga8.aarch64.rpm -wget https://rpmfind.net/linux/mageia/distrib/cauldron/aarch64/media/core/release/obexftp-0.24-17.mga8.aarch64.rpm -``` -### 安装 obexftp - -``` -rpm -i lib64obexftp0-0.24-17.mga8.aarch64.rpm -rpm -i lib64openobex1-1.7.2-3.mga8.aarch64.rpm -rpm -i obexftp-0.24-17.mga8.aarch64.rpm -``` + ``` + rpm -i lib64obexftp0-0.24-17.mga8.aarch64.rpm + rpm -i lib64openobex1-1.7.2-3.mga8.aarch64.rpm + rpm -i obexftp-0.24-17.mga8.aarch64.rpm + ``` -### 查看文件传输的 channel +3. 查看文件传输的 channel,执行下面的命令: -`sdptool browse target-MAC` + `sdptool browse target-MAC` -查看结果: -``` -Browsing target-MAC ... -... -Browsing target-MAC ... -Service Search failed: Invalid argument -Service Name: OBEX Phonebook Access Server -Service RecHandle: 0x1000b -Service Class ID List: - "Phonebook Access - PSE" (0x112f) -Protocol Descriptor List: - "L2CAP" (0x0100) - "RFCOMM" (0x0003) - Channel: 19 - "OBEX" (0x0008) -Profile Descriptor List: - "Phonebook Access" (0x1130) - Version: 0x0101 - -Service Name: OBEX Object Push -Service RecHandle: 0x1000c -Service Class ID List: - "OBEX Object Push" (0x1105) -Protocol Descriptor List: - "L2CAP" (0x0100) - "RFCOMM" (0x0003) - Channel: 12 - "OBEX" (0x0008) -Profile Descriptor List: - "OBEX Object Push" (0x1105) - Version: 0x0102 -... -``` - -看到其中 `Service Name: OBEX Object Push` 下的 ` Channel: 12`。 + 查看结果: + ``` + Browsing target-MAC ... + ... + Browsing target-MAC ... + Service Search failed: Invalid argument + Service Name: OBEX Phonebook Access Server + Service RecHandle: 0x1000b + Service Class ID List: + "Phonebook Access - PSE" (0x112f) + Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 19 + "OBEX" (0x0008) + Profile Descriptor List: + "Phonebook Access" (0x1130) + Version: 0x0101 + + Service Name: OBEX Object Push + Service RecHandle: 0x1000c + Service Class ID List: + "OBEX Object Push" (0x1105) + Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 12 + "OBEX" (0x0008) + Profile Descriptor List: + "OBEX Object Push" (0x1105) + Version: 0x0102 + ... + ``` -### 传输文件 + 看到其中 `Service Name: OBEX Object Push` 下的 ` Channel: 12`。 -文件路径记为 `file-path`。 +4. 传输文件 -`obexftp -b target-MAC -B 12 -U NONE -p file-path` + 待传输的文件路径记为 `file-path`,执行以下命令: -之后就可以在`target-MAC` 对应的设备上选择接收文件,进行文件传输。 + `obexftp -b target-MAC -B 12 -U NONE -p file-path` + + 之后就可以在`target-MAC` 对应的设备上选择接收文件,进行文件传输。 # GPIO @@ -455,7 +416,7 @@ Profile Descriptor List: ![](images/GPIO针脚.png) -GPIO 是个比较重要的概念。用户可以通过 GPIO 口和硬件进行数据交互(如 UART),控制硬件工作(如 LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO 口的使用非常广泛。举例来说,40 个针脚中,有固定输出的 5V(2、4号PIN)、3.3V(1、17号PIN)和地线(Ground,6、9、14、20、25、30、34、39)。如果一个电路两端接在 5V 和地线之间,该电路就会获得 5V 的电压输入,相当于给树莓派通电,注意此时就不可以再通过树莓派提供的电源同时通电。有一些针脚除了 GPIO 功能外,还提供了高级端口功能。例如,GPIO14 和 GPIO15 就可以充当 UART 端口。下面,我们以使用 UART(GPIO14 和 GPIO15)进行串口通信为例介绍如何使用树莓派 GPIO。 +GPIO 是个比较重要的概念。用户可以通过 GPIO 口和硬件进行数据交互(如 UART),控制硬件工作(如 LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO 口的使用非常广泛。举例来说,40 个针脚中,有固定输出的 5V(2、4号PIN)、3.3V(1、17号PIN)和地线(Ground,6、9、14、20、25、30、34、39)。如果一个电路两端接在 5V 和地线之间,该电路就会获得 5V 的电压输入,相当于给树莓派通电,注意,此时就不可以再通过树莓派提供的电源同时通电。有一些针脚除了 GPIO 功能外,还提供了高级端口功能。例如,GPIO14 和 GPIO15 就可以充当 UART 端口。下面,我们以使用 UART(GPIO14 和 GPIO15)进行串口通信为例介绍如何使用树莓派 GPIO。 ## UART @@ -481,7 +442,8 @@ UART 的端口至少有 RX、TX 和地线三个针脚。RX 负责读取,TX 负 ![](images/UART连接PC.png) -注意!!!如果你连接树莓派 UART 针脚所使用的杜邦线不止有三个接口,不要连接树莓派的 5V 或 3.3V 的针脚。如果一个电路两端接在 5V 和地线之间,该电路就会获得 5V 的电压输入,相当于给树莓派通电。此时,如果同时接通树莓派电源设备,会烧坏树莓派! +>![](public_sys-resources/icon-notice.gif) **须知:** +>如果你连接树莓派 UART 针脚所使用的杜邦线不止有三个接口,不要连接树莓派的 5V 或 3.3V 的针脚。如果一个电路两端接在 5V 和地线之间,该电路就会获得 5V 的电压输入,相当于给树莓派通电。此时,如果同时接通树莓派电源设备,会烧坏树莓派! 连接好之后,就可以实现树莓派和 PC 通信。Windows 中可以利用串口通信的图形化软件来和树莓派进行串口通信。注意,根据树莓派配置文件 boot/config.txt 中形如 `console=serial0,115200` 的配置项,串口通信的图形化软件中选择对应串口的波特率应设置为 115200。 @@ -489,7 +451,11 @@ UART 的端口至少有 RX、TX 和地线三个针脚。RX 负责读取,TX 负 由于树莓派 4B 中,默认情况下,PL011 UART 分配给了新增的板载蓝牙模块,mini UART 用于 Linux 控制台进行串口通信。为了实现串口通信,我们可以使用 mini UART,也可以占用 PL011 UART。如果串口通信占用 PL011 UART,板载蓝牙就需要禁用或者使用 mini UART。 -注意树莓派的配置文件 /boot/config.txt 中 `enable_uart` 这个配置项。`enable_uart` 的默认值取决于 UART 的实际角色。如果将 ttyAMA0 分配给蓝牙模块(默认),则 `enable_uart` 默认为 0,即不启用 GPIO 串口;如果将 mini UART 分配给蓝牙模块(`dtoverlay=pi3-miniuart-bt`),则 `enable_uart` 默认值为 1,即启用 GPIO 串口(使用 PL011 UART);如果禁用蓝牙(`dtoverlay=pi3-disable-bt`),则默认将 ttyAMA0 分配给串口通信模块(使用 PL011 UART)。 +>![](public_sys-resources/icon-note.gif) **说明:** +>注意树莓派的配置文件 /boot/config.txt 中 `enable_uart` 这个配置项,`enable_uart` 的默认值取决于 UART 的实际角色。 +> - 如果将 ttyAMA0 分配给蓝牙模块(默认),则 `enable_uart` 默认为 0,即不启用 GPIO 串口; +> - 如果将 mini UART 分配给蓝牙模块(`dtoverlay=pi3-miniuart-bt`),则 `enable_uart` 默认值为 1,即启用 GPIO 串口(使用 PL011 UART); +> - 如果禁用蓝牙(`dtoverlay=pi3-disable-bt`),则默认将 ttyAMA0 分配给串口通信模块(使用 PL011 UART)。 下面我们总结一下不同情况下的配置。 @@ -507,106 +473,89 @@ lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial1 -> ttyAMA0 PL011 UART 作为辅助 UART 分配给新增的板载蓝牙模块,在操作系统中对应文件 /dev/ttyAMA0(/dev/serial1);mini UART 作为主 UART 分配给 Linux 控制台进行串口通信,在操作系统中对应文件 /dev/ttyS0(/dev/serial0)。 -##### 编辑配置文件 - -`vim /boot/config.txt` - -添加: +按照以下步骤进行设置: -``` -enable_uart=1 -``` - -该配置项会同时将核心频率固定到 250MHz,无需设置 core_freq。 +1. 执行 `vim /boot/config.txt` 命令编辑配置文件。 -##### 设置 hciuart 服务开机启动(默认已设置) + 添加: -`systemctl enable hciuart` + ``` + enable_uart=1 + ``` -##### 重启树莓派 + 该配置项会同时将核心频率固定到 250MHz,无需设置 core_freq。 -`reboot` +2. 执行命令 `systemctl enable hciuart` 设置 hciuart 服务开机启动(默认已设置)。如果已设置,则跳过该步骤。 +3. 执行 `reboot` 命令重启树莓派。 +4. 查看串口输出结果 -##### 查看结果 + 执行 `ls -l /dev/serial*` 命令,可以看到如下信息: -命令 `ls -l /dev/serial*`,可以看到如下信息: - -``` -lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial0 -> ttyS0 -lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial1 -> ttyAMA0 -``` + ``` + lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial0 -> ttyS0 + lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial1 -> ttyAMA0 + ``` -在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。见下图: + 在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。见下图: -![](images/串口输出.jpg) + ![](images/串口输出.png) #### 禁用蓝牙,串口使用 PL011 UART PL011 UART 作为主 UART 分配给 Linux 控制台用于串口通信,在操作系统中对应文件 /dev/ttyAMA0(/dev/serial0)。 -##### 编辑配置文件 +按照以下步骤进行设置: -`vim /boot/config.txt` - -添加: - -``` -dtoverlay=pi3-disable-bt -``` +1. 执行 `vim /boot/config.txt` 命令编辑配置文件。 -##### 取消 hciuart 服务开机启动 + 添加: -`systemctl disable hciuart` - -否则, hciuart 服务会默认开机启动,且启动失败。 - -##### 重启树莓派 - -`reboot` + ``` + dtoverlay=pi3-disable-bt + ``` -##### 查看结果 +2. 执行 `systemctl disable hciuart` 命令取消 hciuart 服务开机启动。否则,hciuart 服务会默认开机启动,且启动失败。 +3. 执行 `reboot` 命令重启树莓派。 +4. 查看串口输出结果 -命令 `ls -l /dev/serial*`,可以看到如下信息: -``` -lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial0 -> ttyAMA0 -lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial1 -> ttyS0 -``` + 执行 `ls -l /dev/serial*` 命令,可以看到如下信息: + ``` + lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial0 -> ttyAMA0 + lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial1 -> ttyS0 + ``` -在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。 + 在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。 #### 蓝牙使用 mini UART,串口使用 PL011 UART PL011 UART 作为主 UART 分配给 Linux 控制台用于串口通信,在操作系统中对应文件 /dev/ttyAMA0(/dev/serial0);mini UART 作为辅助 UART 分配给新增的板载蓝牙模块,在操作系统中对应文件 /dev/ttyS0(/dev/serial1)。 -##### 编辑配置文件 -`vim /boot/config.txt` - -添加: - -``` -core_freq=250 -dtoverlay=pi3-miniuart-bt -``` +按照以下步骤进行设置: -注意,这里需要设置 core_freq=250。 +1. 执行 `vim /boot/config.txt` 命令编辑配置文件。 -##### 设置 hciuart 服务开机启动(默认已设置) + 添加: -`systemctl enable hciuart` + ``` + core_freq=250 + dtoverlay=pi3-miniuart-bt + ``` -##### 重启树莓派 + >![](public_sys-resources/icon-notice.gif) **须知:** + >这里需要设置 core_freq=250。 -`reboot` +2. 执行命令 `systemctl enable hciuart` 设置 hciuart 服务开机启动(默认已设置)。如果已设置,则跳过该步骤。 -##### 查看结果 +3. 执行 `reboot` 命令重启树莓派。 +4. 查看串口输出结果 -命令 `ls -l /dev/serial*`,可以看到如下信息: -``` -lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial0 -> ttyAMA0 -lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial1 -> ttyS0 -``` + 执行 `ls -l /dev/serial*` 命令,可以看到如下信息: + ``` + lrwxrwxrwx 1 root root 7 Sep 3 2019 /dev/serial0 -> ttyAMA0 + lrwxrwxrwx 1 root root 5 Sep 3 2019 /dev/serial1 -> ttyS0 + ``` -在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。 + 在 PC 的串口通信图形化软件上,可以看到树莓派的开机日志以及树莓派上通过命令 `echo "hello" > /dev/serial0` 向串口输出的信息。 ## WiringPi @@ -624,7 +573,8 @@ WiringPi 是应用于树莓派平台的 GPIO 控制库函数,包括一套 GPIO `sudo ./build` -注意,当前系统默认未安装 sudo、make、gcc等,使用命令 `dnf install -y sudo make gcc` 安装。 +>![](public_sys-resources/icon-notice.gif) **须知:** +>当前系统默认未安装 sudo、make、gcc等,使用命令 `dnf install -y sudo make gcc` 安装。 ### 使用 WiringPi @@ -640,7 +590,7 @@ WiringPi 是应用于树莓派平台的 GPIO 控制库函数,包括一套 GPIO wiringPiSetup: mmap (GPIO) failed: Operation not permitted ``` -解决方法,编辑 `/boot/cmdline.txt` 添加内容 `iomem=relaxed`,重启树莓派。 +解决方法,编辑 `/boot/cmdline.txt` 添加内容 `iomem=relaxed`,执行 `reboot` 命令重启树莓派。 当前,`/boot/cmdline.txt` 最终内容为: diff --git a/scripts/config/openEuler-20.03-LTS.repo b/scripts/config/openEuler-20.03-LTS.repo index 04032b76a3cf6871d75b30952a13be9415d93dbd..47a1fc1e3311d8d741bb2337f7d394bec4346b4b 100644 --- a/scripts/config/openEuler-20.03-LTS.repo +++ b/scripts/config/openEuler-20.03-LTS.repo @@ -1,17 +1,50 @@ -[openEuler] -name=openEuler 20.03 LTS -baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ +#generic-repos is licensed under the Mulan PSL v2. +#You can use this software according to the terms and conditions of the Mulan PSL v2. +#You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +#PURPOSE. +#See the Mulan PSL v2 for more details. + +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/ enabled=1 -gpgcheck=0 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler -[openEuler-source] -name=openEuler 20.03 LTS - Source -baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/source/ +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/EPOL/$basearch/ enabled=1 -gpgcheck=0 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler -[openEuler-everything] -name=openEuler 20.03 LTS - Everything -baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/everything/aarch64/ +[debuginfo] +name=debuginfo +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/ enabled=1 -gpgcheck=0 \ No newline at end of file +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/RPM-GPG-KEY-openEuler + +[source] +name=source +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/source/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler + +[update] +name=update +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/update/$basearch/ +enabled=0 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler