关于嵌入式:飞腾派OS用户使用开发指南
<article class=“article fmt article-content”><h2><strong>1 飞腾派OS简介</strong></h2><p>飞腾派开发板是一款面向宽广工程师和爱好者的开源硬件。主板处理器采纳飞腾四核处理器,兼容ARM V8 指令集,主频最高可达 1.8GHz。</p><p>飞腾派 OS(Phytium Pi OS)是运行在飞腾派开发板上的操作系统,基于Debian 并针对飞腾派开发板深度定制,其中包含固件,内核,各接口驱动程序,桌面零碎,用于各种场景的开发包等。它能够烧录在 SD 卡中,作为飞腾派开发板的启动零碎。</p><h3><strong>1.1 飞腾派开发板的硬件规格</strong></h3><p>开发板内置 2/4GB DDR4 内存, 双路千兆以太网、USB、UART、CAN、HDMI、音频等接口。主板板载 WiFi 蓝牙,陶瓷天线,可疾速连贯无线通信。集成一路 miniPCIE 接口,可实现AI 加速卡与4G通信等。</p><table><thead><tr><th>性能</th><th>形容</th></tr></thead><tbody><tr><td>CPU</td><td>飞腾四核处理器,ARMV8 架构</td></tr><tr><td>内存</td><td>2G、4G 版本,64 位 DDR4</td></tr><tr><td>存储</td><td>反对 microSD 和 EMMC 启动,默认 microSD</td></tr><tr><td>网络</td><td>2×千兆以太网(RJ45)</td></tr><tr><td>USB</td><td>1×USB3.0 host,3×USB2.0 host</td></tr><tr><td>PCIe</td><td>1×Mini-PCIe ,反对 4G、AI 等模组</td></tr><tr><td>蓝牙</td><td>板载蓝牙 BT4.2/ BLE4.2</td></tr><tr><td>WiFi</td><td>板载 2.4G + 5G 双频 WIFi</td></tr><tr><td>显示</td><td>1× HDMI,最高反对 19201080 分辨率</td></tr><tr><td>视频解码</td><td>2K30p(H.264/265)\1080p60</td></tr><tr><td>音频</td><td>3.5mm 耳机口音频输入</td></tr><tr><td>UART</td><td>1×调试串口+2×MIO(可配置为 UART 模式)</td></tr><tr><td>I2C</td><td>2+2×MIO(可配置为 I2C 模式)</td></tr><tr><td>I2S</td><td>1 路</td></tr><tr><td>SPI</td><td>2 路</td></tr><tr><td>CAN</td><td>2 路 CANFD</td></tr><tr><td>GPIO</td><td>最多 29 个</td></tr><tr><td>供电</td><td>12V3A 直流电源</td></tr><tr><td>工作温度</td><td>050°C</td></tr></tbody></table><h3><strong>1.2 飞腾派 OS 的次要性能</strong></h3><p>linux 5.10.153 内核</p><p>多种外设驱动</p><p>Debian 11 定制零碎</p><p>Xfce 桌面零碎</p><p>反对 WiFi6 双频配置</p><p>反对蓝牙 配置</p><p>反对 4G/5G 网卡</p><p>反对 AI 加速卡</p><p>反对 web,Python 开发包</p><p>反对类树莓派 HAT 板开发包</p><p>反对 EtherCAT+ Linux RT</p><p>反对 Xenomai</p><h3><strong>1.3 反对的次要驱动</strong></h3><p>mirco SD</p><p>eMMC</p><p>千兆以太网控制器及收发器</p><p>USB</p><p>miniPCIe</p><p>蓝牙 v4.2</p><p>wifi6</p><p>UART</p><p>I2C</p><p>I2S</p><p>SPI</p><p>CAN</p><p>GPIO</p><p>MIO</p><p>watchdog</p><h3><strong>1.4 反对的次要软件包</strong></h3><p>openssl</p><p>ffmpeg</p><p>ssh</p><p>gdb</p><p>Python3</p><p>lua5.1</p><p>curl</p><p>nfs-common</p><p>ntfs-3g</p><p>cifs-utils</p><p>mkvtoolnix</p><p>wpasupplicant</p><p>wireless-tools</p><p>dhcpd5</p><p>vlc</p><p>bluez</p><p>pulseaudio</p><p>blueman</p><p>bluetooth</p><p>python3-pygame</p><p>python3-tk</p><p>python3-spidev</p><p>python3-pip</p><p>libgles2-mesa</p><h2><strong>2 飞腾派OS使用指南</strong></h2><h3><strong>2.1 筹备 SD 卡启动镜像</strong></h3><p>下载 SD 卡的镜像 sdcard.img,能够在 Linux 或 Windows 上将镜像烧录到SD卡中。请筹备一张容量大于 16G 的 SD 卡,并连贯到 Linux 或 Windows 主机上。</p><h4><strong>2.1.1 Windows 烧录镜像</strong></h4><p>应用 win32 Disk imager 进行烧录。</p><p>具体应用办法见: https://blog.csdn.net/Mr_LanGX/article/details/123338081</p><h4><strong>2.1.2 Linux 烧录镜像</strong></h4><p>主机端将 SD 卡接入主机(以主机辨认设施名为/dev/sdb 为例,请按理论辨认设施名更改,确定设施没有被挂载,如果有挂载,须要 umount)</p><pre><code>$ sudo dd if=sdcard.img of=/dev/sdb bs=1M</code></pre><h3><strong>2.2 系统启动</strong></h3><p>将有镜像的 SD 卡插入(确认开发板配置为 SD 卡启动,参见飞腾派硬件规格书7.13 节“启动选择开关”),HDMI 连贯显示器,连贯 USB 键盘鼠标,连贯电源线,启动零碎,在显示器上会呈现小企鹅标记,最初显示登录界面。登录的用户名:user,明码:user</p><p></p><h3><strong>2.3 桌面根本介绍</strong></h3><p>Xfce 作为默认的桌面环境,是一款轻量级桌面环境,重视效率和资源利用,它提供了简洁而直观的界面。</p><p></p><p>在桌面底部两头的地位,从左到右提供 “显示桌面”,“终端”,“文件管理器”,“web浏览器”,“程序查找器”“快捷文件管理器”。</p><h4><strong>2.3.1 web 浏览器</strong></h4><p>Xfce 提供 firefox 作为默认浏览器</p><p></p><h4><strong>2.3.2 终端 </strong></h4><p>在终端中,能够应用命令行来治理和设置零碎,开发软件。 user 用户能够在终端中 sudo 来获取 root 权限。</p><p></p><h4><strong>2.3.3 文件管理器</strong></h4><p>通过文件管理器,能够管理文件,关上,批改,保留文件。</p><p></p><h3><strong>2.4 网络连接设置</strong></h3><h4><strong>2.4.1 有线网络</strong></h4><p>默认两个网口都是 DHCP 的,能够连贯路由器获取 IP 地址。</p><p>点击桌面右上角的连贯图标来查看有线网网络连接状况。</p><p></p><p>通过网络管理器来设置你的网络参数,减少删除连贯,批改连贯参数。 </p><p></p><h4><strong> 2.4.2 WiFi 网络</strong></h4><p>零碎曾经集成 WIFI 驱动. 启动后能够主动加载看到 wlan0 . wpasupplicant 服务默认主动启动。点击桌面右上角的连贯图标来查看 WiFi 网络。</p><p></p><p>点击 create new WiFi network,来创立一个连贯,输出 network name 和key,就能够连贯到WiFi 网络。</p><p></p><p>敞开 WiFi 服务</p><pre><code>$ sudo systemctl disable wpa_supplicant.service $ sudo reboot</code></pre><p>关上 WiFi 服务</p><pre><code>$ sudo systemctl enable wpa_supplicant.service $ sudo reboot</code></pre><h3><strong>2.5 蓝牙设置</strong></h3><p>蓝牙服务零碎默认是敞开的。启动步骤如下:</p><pre><code>$ sudo systemctl enable bluetooth.service $ sudo systemctl enable systemd-hciattach.service $ sudo reboot</code></pre><p>重启后,在桌面右上角的状态栏中有蓝牙图标,点击图标能够增加蓝牙设施。</p><p></p><p>在增加设施窗口,点击“search”找到要连贯的蓝牙耳机和音响,右键选连贯。 </p><p></p><p>如果通过蓝牙播放音乐</p><p>vlc 播放器抉择 Audio —-> Audio Device -> <蓝牙耳机设施</p><p></p><h3><strong>2.6 应用 SSH</strong></h3><p>SSH client 和 SSH server 默认曾经集成在飞腾派 OS 中,能够间接应用。<br/>首先确保飞腾派有线网口或wifi网口有IP地址 (上面的例子中eth0 的ip address 是10.10.80.174),能够通过 ip addr 命令查看。</p><pre><code>user@phytiumpi:$ ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWNgroupdefault qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stateUPgroup default qlen 1000 link/ether 6c:b3:11:0f:9c:e8 brd ff:ff:ff:ff:ff:ff permaddr 00:11:22:33:44:55 inet 10.10.80.174/24 brd 10.10.80.255 scope global dynamic noprefixrouteeth0 valid_lft 1263sec preferred_lft 1263sec inet6 fe80::8cf3:ea81:564c:a144/64 scope link noprefixroute valid_lft forever preferred_lft forever3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mqstateDOWN group default qlen 1000 link/ether 10:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff</code></pre><p>其次通过 ping 命令查看和远端设施的连通性。(飞腾派 IP 10.10.80.174,远端设施IP10.10.80.170)</p><pre><code>$ ping 10.10.80.174PING 10.10.80.174 (10.10.80.174) 56(84) bytes of data.64 bytes from 10.10.80.174: icmp_seq=1 ttl=64 time=0.350 ms64 bytes from 10.10.80.174: icmp_seq=2 ttl=64 time=0.294 ms^C— 10.10.80.174 ping statistics —2 packets transmitted, 2 received, 0% packet loss, time 1028msrtt min/avg/max/mdev = 0.294/0.322/0.350/0.028 ms</code></pre><p>最初在确认能够 ping 通远端设施的状况下:</p><p>a. 从飞腾派开发板登录近程设施</p><pre><code>user@phytiumpi:$ ssh phytium@10.10.80.170The authenticity of host ‘10.10.80.170 (10.10.80.170)’ can’t be established. ECDSA key fingerprint isSHA256:C7MVQ7GzEb4EKkINKnrEfmQ/Cu0VkpRzypMbeHgpJEw. Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added ‘10.10.80.170’ (ECDSA) to the list of known hosts.phytium@10.10.80.170’s password:Welcome to Kylin V10 SP1 (GNU/Linux 5.4.18-57-generic aarch64) * Management: http://www.kylinos.cn/ * Support:http://www.kylinos.cn/service.aspxLast login: Fri Jun 9 15:08:07 2023 from 10.10.80.177phytium@phytium-d2000:$</code></pre><p>b. 从近程设施登录飞腾派开发板 (password: user)</p><pre><code>$ ssh user@10.10.80.174The authenticity of host ‘10.10.80.174 (10.10.80.174)’ can’t be established. ECDSA key fingerprint isSHA256:6CzIeVEaWgskwMdXDu/VcnS6c85/S/O4fUWaHdTVJY0.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added ‘10.10.80.174’ (ECDSA) to the list of known hosts. user@10.10.80.174’s password:Linux phytiumpi 5.10.153-rt76-phytium-embeded-2023-v1.0-GA #1 SMPPREEMPT_RT Tue Aug 8 14:09:59 CST 2023 aarch64 The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc//copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law. Last login: Wed Aug 9 18:13:43 2023 from 10.10.80.198user@phytiumpi:~$</code></pre><h3><strong>2.7 应用调试串口</strong></h3><p>串口连贯请参考《飞腾派_V2 硬件规格书》中的调试串口地位(管脚 8,10,12),连贯串口 <br/>串口终端程序必须设置为:</p><ul><li>波特率:115200</li><li>数据位:8</li><li>奇偶校验:无</li><li>进行位:1</li></ul><p>零碎调试串口下的用户有 user 和 root</p><ul><li>用户名:user;明码:user</li><li>用户名:root;明码:root</li></ul><p></p><h3><strong>2.8 软件装置</strong></h3><p>能够在命令行终端中通过 apt-get install 来装置,或者在图形界面中双击.deb 包文件进行装置。<br/>其余的 Debian 应用问题能够参考如下文档: https://www.debian.org/doc/manuals/debian-reference/</p><h2><strong>3 飞腾派OS开发指南</strong></h2><h3><strong>3.1 构建飞腾派OS</strong></h3><p>飞腾派OS是由 Buildroot 生成的,buildroot 是一种简略、高效且易于应用的工具,能够通过穿插编译 在 主 机 系 统 上 生 成 飞 腾 派 OS 的 镜 像 文件。能够参考:https://buildroot.org/downloads/manual/manual.html</p><p>咱们只反对在 ubuntu20.04、ubuntu22.04、debian11 这三种主机零碎上运行Buildroot,不反对其余零碎。 首先,Buildroot 须要主机零碎上装置如下 Linux 程序,请查看是否已装置:</p><pre><code>Build tools: - which - sed - make (version 3.81 or any later) - binutils - build-essential (only for Debian based systems) - gcc (version 4.8 or any later) - g++ (version 4.8 or any later) - bash - patch - gzip - bzip2 - perl (version 5.8.7 or any later) - tar - cpio - unzip - rsync - file (must be in /usr/bin/file) -device-tree-compiler - bcSource fetching tools: - wget - git</code></pre><p>除此之外,还须要装置如下软件包:</p><pre><code>$ sudo apt install debootstrap qemu-user-static binfmt-support debian-archive-keyring</code></pre><p>对于 debian11 零碎,须要设置 PATH 环境变量:</p><pre><code>$ PATH=$PATH:/usr/sbin</code></pre><h4><strong>3.1.1 下载 phytium-pi-os</strong></h4><pre><code>$ git clone https://gitee.com:phytium_embedded/phytium-pi-os.git</code></pre><h4><strong>3.1.2 根本 defconfig</strong></h4><p>飞腾派构建的文件系统的配置文件位于 configs 目录。</p><p>在 phytium-pi-os 根目录下执行$ make list-defconfigs,返回 configs 目录中的defconfig配置文件。</p><pre><code>$ make list-defconfigs</code></pre><p>其中以 phytium 结尾的为飞腾派相干的 defconfig 配置文件,蕴含:</p><pre><code>phytiumpi_defconfig - Build for phytiumpi (without desktop)phytiumpi_desktop_defconfig - Build for phytiumpi_desktop</code></pre><h4><strong>3.1.3 编译 SD 卡镜像</strong></h4><p>(1)加载 defconfig</p><pre><code>$ make phytiumpi_xxx_defconfig</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><p>(3)镜像的输入地位</p><p>生成的根文件系统、内核位于 output/images 目录。 sdcard.img 就是SD 的镜像文件。</p><p></p><h4><strong>3.1.4 EtherCAT config</strong></h4><p>编译 ethercat,对于 ethercat 的信息请参考:https://gitee.com/phytium_embedded/ether-cat </p><p>反对将 ethercat 驱动及用户态的库、工具编译装置到 debian 零碎上。如果须要编译ethercat 请执行:</p><p>(1)应用 phytiumpi_xxx_defconfig 作为根底配置项,在 phytiumpi_xxx_defconfig中退出反对rt内核,及 ethercat 的配置:</p><pre><code>$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfigconfigs/phytiumpi_linux_5.10_rt.config configs/phytiumpi_ethercat.config</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><h4><strong>3.1.5 Xenomai Config</strong></h4><p>编译 xenomai,对于 xenomai 的信息请参考:https://gitee.com/phytium_embedded/linux-kernel-xenomai</p><p>反对将 xenomai 内核及用户态的库、工具编译装置到飞腾派 OS 上。如果须要编译xenomai 请执行:</p><p>(1)应用 phytiumpi_xxx_defconfig 作为根底配置项,在 phytiumpi_xxx_defconfig 退出xenomai 的配置:</p><pre><code>$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfigconfigs/phytiumpi_xenomai_xxx.config</code></pre><p>phytiumpi_xenomai_xxx.config 为以下配置片段文件之一:</p><pre><code>phytiumpi_xenomai_mercury_5.10.config (linux 5.10 rt 内核+xenomai-v3.2.2.tar.gz) phytiumpi_xenomai_cobalt_5.10.config (xenomai cobalt 5.10 内核+xenomai-v3.2.2.tar.gz)</code></pre><p>(2)编译</p><pre><code>$ make</code></pre><h4><strong>3.1.6 清理编译后果</strong></h4><p>(1)make clean</p><p>删除所有编译后果,包含 output 目录下的所有内容。当编译完一个文件系统后,编译另一个文件系统前,须要执行此命令。</p><p>(2)make distclean</p><p>重置 buildroot,删除所有编译后果、下载目录以及配置。</p><h3><strong>3.2 应用新内核</strong></h3><h4><strong>3.2.1 穿插编译内核</strong></h4><p>如果用户想本人手工命令构建内核,设施树以及内核模块,能够依照该章节操作。</p><p>在 x86 穿插编译 arm64 内核,举荐应用编译器的链接如下:<br/>https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz</p><p>将其解压缩到/opt 目录后,而后设置环境变量,操作步骤如下:</p><pre><code>$ export PATH=/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin:$PATH$ export ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- $ export CC=aarch64-none-linux-gnu-gcc</code></pre><p>从如下网址下载 Rt 内核源代码(以 Rt 内核为例):<br/>https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt </p><p>第一步:进入内核根目录下,依照下述步骤配置和编译 Rt 内核</p><pre><code>$ make phytiumpi_firefly_defconfig$ make</code></pre><p>其中内核的名称是 Image,设施树的名称是 phytiumpi_firefly.dtb。</p><p>第二步:因为内核很多模块编译成 ko,所以须要手工生成 ko 的装置目录和文件:</p><p>在内核当前目录下创立 build 目录,作为 ko 的装置目录。当然用户能够设置任何目录为装置目录。</p><pre><code>$ mkdir build</code></pre><p>设置 build 目录为装置目录</p><pre><code>$ export INSTALL_MOD_PATH=pwd/build</code></pre><p>装置模块</p><pre><code>$ make modules_install</code></pre><p>查看模块</p><pre><code>$ ls build/lib/modules/5.10.153-rt76-phytium-embeded-2023-v1.0-GA</code></pre><p>其中,模块名称分 2 局部,第一局部“5.10.153-rt76-phytium-embeded”不会变动,第二局部“-v1.0-GA”会随着版本的不断更新而继续更新,本章节后续章节形容内核模块以不变局部为准。</p><p>第三步:将 SD 卡插到 USB 读卡器上,而后插到穿插编译机上,假如读卡器的设施节点为sdc,将内核和设施树装置到 SD 卡的/boot 目录(留神提前备份旧的内核和设施树以及内核模块)。</p><pre><code>$ sudo mount /dev/sdc1 /mnt$ sudo cp arch/arm64/boot/Image /mnt/boot/$ sudo cp arch/arm64/boot/dts/phytium/phytiumpi_firefly.dtb /mnt/boot/</code></pre><p>而后将配套的内核模块装置到/lib/modules</p><pre><code>$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /mnt/lib/modules-R$ sudo umount /mnt</code></pre><h4><strong>3.2.2 飞腾派开发板上编译内核</strong></h4><p>开发板启动注册之后须要装置如下软件,这些软件包如果没有装置,编译内核的时候可能失败。</p><pre><code>$ sudo apt-get install autoconf automake libtool fuse debhelper findutils autotools-dev pkg-config libltdl-dev flex bison device-tree-compiler libssl-dev</code></pre><p>从如下网址下载 Rt 内核源代码(以 Rt 内核为例): <br/>https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt</p><p>第一步:进入内核根目录下,依照下述步骤配置和编译 Rt 内核</p><pre><code>$ make phytiumpi_firefly_defconfig$ make</code></pre><p>其中内核的名称是 Image,设施树的名称是 phytiumpi_firefly.dtb。</p><p>第二步:因为内核很多模块编译成 ko,所以须要手工生成 ko 的装置目录和文件:</p><p>在内核当前目录下创立 build 目录,作为 ko 的装置目录。当然用户能够设置任何目录为装置目录。</p><pre><code>$ mkdir build</code></pre><p>设置 build 目录为装置目录</p><pre><code>$ export INSTALL_MOD_PATH=pwd/build</code></pre><p>装置模块</p><pre><code>$ make modules_install</code></pre><p>查看模块</p><pre><code>$ ls build/lib/modules/5.10.153-rt76-phytium-embeded-2023-v1.0-GA</code></pre><p>其中,模块名称分 2 局部,第一局部“5.10.153-rt76-phytium-embeded”不会变动,第二局部“-v1.0-GA”会随着版本的不断更新而继续更新,本章节后续章节形容内核模块以不变局部为准。</p><p>第三步:将内核和设施树装置到/boot 目录(留神提前备份旧的内核和设施树以及内核模块)。</p><pre><code>$ sudo cp arch/arm64/boot/Image /boot/$ sudo cp arch/arm64/boot/dts/phytium/phytiumpi_firefly.dtb /boot/</code></pre><p>而后将配套的内核模块装置到/lib/modules</p><pre><code>$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /lib/modules -R$ sudo umount /mnt</code></pre><p>与穿插编译内核相比,显然在飞腾派开发板上编译内核上步骤简洁,更换内核也更不便。然而实际上,在飞腾开发板上编译内核速度很慢,效率很低,因为在个别状况下,飞腾派开发板的CPU的性能比穿插编译机会差很多。</p><h4><strong>3.2.3 启动新内核</strong></h4><p>启动开发板,而后在 Uboot 启动阶段敲击键盘的回车键,这时零碎会停留在Uboot 的Shell 界面,如下所示。</p><pre><code>AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA modeflags: 64bit ncq stag pm led clo only pmp pio slum part ccc apstSATA link 0 timeout. AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA modeflags: 64bit ncq stag pm led clo only pmp pio slum part ccc apstHit any key to stop autoboot: 0 // 红颜色打印信息回显后键入回车字符E2000# // 这时进入 Uboot 的 Shell 界面E2000#setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000root=/dev/mmcblk0p1 rootwait rwE2000#ext4load mmc 0:1 0x90100000home/user/test/5.10.153-phytium-embeded-rt/Image28692992 bytes read in 6293 ms (4.3 MiB/s)E2000#ext4load mmc 0:1 0x90000000home/user/test/5.10.153-phytium-embeded-rt/phytiumpi_firefly.dtb25125 bytes read in 13 ms (1.8 MiB/s)E2000#booti 0x90100000 - 0x90000000</code></pre><p>在 Uboot 的 shell 菜单依照如下步骤疏导内核和设施树启动。</p><p>第一步:设置启动参数,其中,嵌入式 Linux 文件系统</p><pre><code>E2000# setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000root=/dev/mmcblk0p1 rootwait rw;</code></pre><p>第二步:加载内核到内存</p><pre><code>E2000# ext4load mmc 0:1 0x90100000 boot/Image;</code></pre><p>这时,串口会打印如下信息提醒加载胜利</p><pre><code>28692992 bytes read in 6293 ms (4.3 MiB/s)</code></pre><p>第三步:加载设施树到内存</p><pre><code>E2000# ext4load mmc 0:1 0x90000000 boot/phytiumpi_firefly.dtb;</code></pre><p>这时,串口会打印如下信息提醒加载胜利</p><pre><code>25125 bytes read in 13 ms (1.8 MiB/s)</code></pre><p>第四步:疏导启动内核</p><pre><code>E2000# booti 0x90100000 – 0x90000000;</code></pre><p>打印信息如下</p><pre><code>Moving Image from 0x90100000 to 0x90200000, end=91df0000## Flattened Device Tree blob at 90000000 Booting using the fdt blob at 0x90000000 Loading Device Tree to 00000000f9c32000, end 00000000f9c3b224 … OKrun in ft_board_setupfdt_addr 00000000f9c32000N: Phytium System Service Call: 0xc2000005mb_count = 0x1mb_blocks[0].mb_size = 0x7c000000mb_blocks[1].mb_size = 0xffa16920fdt : remove memory@1fdt : dram size 0x17fa16920 update successfully Starting kernel … / { compatible = “phytium,pe2204”; interrupt-parent = <0x00000001>; #address-cells = <0x00000002>; … … // 打印信息太多,此处省略[ 0.000000] Booting Linux on physical CPU 0x0000000200 [0x700f3034][ 0.000000] Linux version 5.10.153-rt76-phytium-embeded-2023-v1.0-GA[ 0.000000] Machine model: Phytium Pi Board … … // 打印信息太多,此处省略[ OK ] Finished Hold until boot process finishes up. [ OK ] Finished Save/Restore Sound Card State. [ OK ] Started OpenBSD Secure Shell server. Phytium Piphytiumpi login: // Linux Shell 提醒界面</code></pre><p>这时,输出用户名 user 和明码 user 进入 Linux shell。</p><h3><strong>3.3 应用内核模块</strong></h3><p>linux-headers 蕴含构建内核内部模块所需的头文件,buildroot 构建会生成linux-headers。<br/>对于如何编译内核内部模块,可参考 :https://www.kernel.org/doc/html/latest/kbuild/modules.html</p><h4><strong>3.3.1 穿插编译内核模块</strong></h4><p>buildroot 构建会在 output/target/usr/src 目录中装置 linux-headers-version。应用 buildroot 的工具链来穿插编译内核模块,buildroot 工具链位于output/host/bin,工具链的sysroot 为 output/host/aarch64-buildroot-linux-gnu/sysroot。</p><p>穿插编译内核内部模块的命令为:</p><pre><code>$ make ARCH=arm64 \CROSS_COMPILE=/home/xxx/phytiumpios/output/host/bin/aarch64-none-linux-gnu--C/home/xxx/phytiumpios/output/target/usr/src/linux-headers-5.10.153-phytium-embeded \M=$PWD \modules</code></pre><h4><strong>3.3.2 飞腾派开发板上编译内核模块</strong></h4><p>buildroot 将 linux-headers-version 装置在根文件系统的/usr/src 目录下,并为它创立了一个软链接/lib/modules/version/build。</p><p>留神,因为 linux-headers 是在 x86-64 主机穿插编译生成的,在开发板上间接应用它编译内核模块会报错:</p><pre><code>/bin/sh: 1: scripts/basic/fixdep: Exec format error</code></pre><p>因而,须要将 x86-64 格局的 fixdep 等文件替换为 ARM aarch64 格局的(以linux 5.10内核为例):</p><p>(1)在开发板上执行:</p><pre><code>scp -rusername@host:/home/xxx/phytiumpios/board/phytium/common/linux-5.10/scripts/usr/src/linux-headers-5.10.153-phytium-embeded</code></pre><p>在开发板上编译内核内部模块的命令为:</p><pre><code>make -C /lib/modules/5.10.153-phytium-embeded/build M=$PWD modules</code></pre><h3><strong>3.4 buildroot 编译新的应用软件</strong></h3><p>本节简略介绍如何通过 buildroot 穿插编译能运行在开发板上的应用软件,残缺的教程请参考:https://buildroot.org/downloads/manual/manual.html</p><h4><strong>3.4.1 buildroot 软件包介绍</strong></h4><p>buildroot 中所有用户态的软件包都在 package 目录,每个软件包有本人的目录package/,其中是小写的软件包名。这个目录蕴含:</p><ol><li>Config.in 文件,用 Kconfig 语言编写,形容了包的配置选项。</li><li>.mk 文件,用 make 编写,形容了包如何构建,即从哪里获取源码,如何编译和装置等。</li><li>.hash 文件,提供 hash 值,查看下载文件的完整性,如查看下载的软件包源码是否残缺,这个文件是可选的。</li><li>*.patch 文件,在编译之前利用于源码的补丁文件,这个文件是可选的。</li><li>可能对包有用的其余文件。</li></ol><h4><strong>3.4.2 编写 buildroot 软件包</strong></h4><p>首先创立软件包的目录 package/<pkg>,而后编写该软件包中的文件。</p><p>buildroot 中的软件包基本上由 Config.in 和.mk 两个文件组成。对于如何编写这两个文件,大家能够参考 buildroot 用户手册,这里简略概括一下。</p><p>(1)Config.in 文件中必须蕴含启用或禁用该包的选项,而且必须命名为BR2_PACKAGE_,其中<PKG>是大写的软件包名,这个选项的值是布尔类型。也能够定义其余性能选项来进一步配置该软件包。而后还必须在 package/Config.in 文件中蕴含该文件:</p><pre><code>source “package/<pkg>/Config.in”</code></pre><p>(2)<pkg>.mk 文件看起来不像一般的 Makefile 文件,而是一连串的变量定义,而且必须以大写的包名作为变量的前缀。最初以调用软件包的根底构造(package infrastructure)完结。变量通知软件包的根底构造要做什么。</p><p>对于应用手写 Makefile 来编译的软件源码,在<pkg>.mk 中调用 generic-package根底构造。generic-package 根底构造实现了包的下载、提取、打补丁。而配置、编译和装置由<pkg>.mk文件形容。<pkg>.mk 文件中能够设置的变量及其含意,请参考 buildroot 用户手册。</p><h4><strong>3.4.3 编译软件包</strong></h4><p>(1)独自编译软件包</p><pre><code>$ cd xxx/phytiumpios$ make <pkg></code></pre><p>编译后果在 output/build/- <pkg>-<version></p><p>(2)将软件包编译进根文件系统</p><p>在 phytiumpi_xxx_defconfig 中增加一行 BR2_PACKAGE_<pkg>=y</p><pre><code>$ make phytiumpi_xxx_defconfig$ make</code></pre><h2><strong>A 扩大材料</strong></h2><p>https://gitee.com/phytium_embedded/phytium-embedded-docs</p><hr/><blockquote><strong>更多资料获取:</strong>飞腾开发者平台</blockquote><p>版权所有。飞腾信息技术有限公司 2023。保留所有权力。<br/>未经本公司批准,任何单位、公司或集体不得擅自复制,翻译,摘抄本文档内容的局部或全副,不得以任何形式或路径进行流传和宣传。</p><p>商标申明<br/>Phytium和其余飞腾商标均为飞腾信息技术有限公司的商标。<br/>本文档提及的其余所有商标或注册商标,由各自的所有人领有。</p><p>留神<br/>本文档的内容视为飞腾的窃密信息,您该当严格遵守窃密工作;未经飞腾当时书面批准,您不得向任何第三方披露本文档内容或提供给任何第三方应用。</p><p>因为产品版本升级或其余起因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为应用领导,飞腾在现有技术的根底上尽最大致力提供相应的介绍及操作指引,但飞腾在此明确申明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保障。</p><p>本文档中所有内容,包含但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法领有其知识产权,包含但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面批准,任何人不得擅自应用、批改,复制上述内容。</p></article> ...