飞腾派OS用户使用开发指南

【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧      

本文分享来源于飞腾开发者平台《飞腾派OS用户使用开发手册》

        飞腾派开发板是一款面向广大工程师和爱好者的开源硬件。主板处理器采用飞腾四核处理器,兼容ARM V8 指令集,主频最高可达 1.8GHz。 飞腾派 OS(Phytium Pi OS)是运行在飞腾派开发板上的操作系统,基于Debian 并针对飞腾派开发板深度定制,其中包括固件,内核,各接口驱动程序,桌面系统,用于各种场景的开发包等。它可以烧录在 SD 卡中,作为飞腾派开发板的启动系统。


1 飞腾派OS简介

1.1 飞腾派开发板的硬件规格

        开发板内置 2/4GB DDR4 内存, 双路千兆以太网、USB、UART、CAN、HDMI、音频等接口。主板板载 WiFi 蓝牙,陶瓷天线,可快速连接无线通信。集成一路 miniPCIE 接口,可实现AI 加速卡与4G通信等。

功能描述
        CPU        飞腾四核处理器,ARMV8 架构
内存2G、4G 版本,64 位 DDR4
存储支持 microSD 和 EMMC 启动,默认 microSD
网络2×千兆以太网(RJ45)
USB1×USB3.0 host,3×USB2.0 host
PCIe1×Mini-PCIe ,支持 4G、AI 等模组
蓝牙板载蓝牙 BT4.2/ BLE4.2
WiFi板载 2.4G + 5G 双频 WIFi
显示1× HDMI,最高支持 1920*1080 分辨率
视频解码2K30p(H.264/265) | 1080p60
音频3.5mm 耳机口音频输出
UART1×调试串口+2×MIO(可配置为 UART 模式)
I2C2+2×MIO(可配置为 I2C 模式)
I2S1 路
SPI2 路
CAN2 路 CANFD
GPIO最多 29 个
供电 12V3A 直流电源
工作温度0~50°C

1.2 飞腾派 OS 的主要功能

        linux 5.10.153 内核

        多种外设驱动

        Debian 11 定制系统

        Xfce 桌面系统

        支持 WiFi6 双频配置

        支持蓝牙 配置

        支持 4G/5G 网卡

        支持 AI 加速卡

        支持 web,Python 开发包

        支持类树莓派 HAT 板开发包

        支持 EtherCAT+ Linux RT

        支持 Xenomai

1.3 支持的主要驱动

        mirco SD

        eMMC

        千兆以太网控制器及收发器

        USB

        miniPCIe

        蓝牙 v4.2

        wifi6

        UART

        I2C

        I2S

        SPI

        CAN

        GPIO

        MIO

        watchdog

1.4 支持的主要软件包

        openssl

        ffmpeg

        ssh

        gdb

        Python3

        lua5.1

        curl

        nfs-common

        ntfs-3g

        cifs-utils

        mkvtoolnix

        wpasupplicant

        wireless-tools

        dhcpd5

        vlc

        bluez

        pulseaudio

        blueman

        bluetooth

        python3-pygame

        python3-tk

        python3-spidev

        python3-pip

        libgles2-mesa

2 飞腾派OS使用指南

2.1 准备 SD 卡启动镜像

        下载 SD 卡的镜像 sdcard.img,可以在 Linux 或 Windows 上将镜像烧录到SD卡中。请准备一张容量大于 16G 的 SD 卡,并连接到 Linux 或 Windows 主机上。

2.1.1 Windows 烧录镜像

        使用 win32 Disk imager 进行烧录。

        具体使用方法见: https://blog.csdn.net/Mr_LanGX/article/details/123338081

2.1.2 Linux 烧录镜像

        主机端将 SD 卡接入主机(以主机识别设备名为/dev/sdb 为例,请按实际识别设备名更改,确定设备没有被挂载,如果有挂载,需要 umount)

$ sudo dd if=sdcard.img of=/dev/sdb bs=1M

2.2 系统启动

        将有镜像的 SD 卡插入(确认开发板配置为 SD 卡启动,参见飞腾派硬件规格书7.13 节“启动选择开关”),HDMI 连接显示器,连接 USB 键盘鼠标,连接电源线,启动系统,在显示器上会出现小企鹅标志,最后显示登录界面。登录的用户名:user,密码:user

 2.3 桌面基本介绍

        Xfce 作为默认的桌面环境,是一款轻量级桌面环境,注重效率和资源利用,它提供了简洁而直观的界面。

         在桌面底部中间的位置,从左到右提供 “显示桌面”,“终端”,“文件管理器”,“web浏览器”,“程序查找器”“快捷文件管理器”。

2.3.1 web 浏览器

        Xfce 提供 firefox 作为默认浏览器

2.3.2 终端 

        在终端中,可以使用命令行来管理和设置系统,开发软件。 user 用户可以在终端中 sudo 来获取 root 权限。

 2.3.3 文件管理器

        通过文件管理器,可以管理文件,打开,修改,保存文件。

 2.4 网络连接设置

2.4.1 有线网络

        默认两个网口都是 DHCP 的,可以连接路由器获取 IP 地址。

        点击桌面右上角的连接图标来查看有线网网络连接情况。

        通过网络管理器来设置你的网络参数,增加删除连接,修改连接参数。 

 2.4.2 WiFi 网络

        系统已经集成 WIFI 驱动. 启动后可以自动加载看到 wlan0 . wpasupplicant 服务默认自动启动。点击桌面右上角的连接图标来查看 WiFi 网络。

        点击 create new WiFi network,来创建一个连接,输入 network name 和key,就可以连接到WiFi 网络。

        关闭 WiFi 服务

$ sudo systemctl disable wpa_supplicant.service

$ sudo reboot

        打开 WiFi 服务

$ sudo systemctl enable wpa_supplicant.service

$ sudo reboot

2.5 蓝牙设置

        蓝牙服务系统默认是关闭的。启动步骤如下:

$ sudo systemctl enable bluetooth.service

$ sudo systemctl enable systemd-hciattach.service

$ sudo reboot

        重启后,在桌面右上角的状态栏中有蓝牙图标,点击图标可以添加蓝牙设备。

        在添加设备窗口,点击“search”找到要连接的蓝牙耳机和音响,右键选连接。 

        如果通过蓝牙播放音乐 

                vlc 播放器选择 Audio —-> Audio Device -> <蓝牙耳机设备

2.6 使用 SSH

        SSH client 和 SSH server 默认已经集成在飞腾派 OS 中,可以直接使用。首先确保飞腾派有线网口或wifi网口有IP地址 (下面的例子中eth0 的ip address 是10.10.80.174),可以通过 ip addr 命令查看。 

user@phytiumpi:~$ ip addr
1: 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 forever
2: 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 forever
3: 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

        其次通过 ping 命令查看和远端设备的连通性。(飞腾派 IP 10.10.80.174,远端设备IP10.10.80.170)

$ ping 10.10.80.174
PING 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 ms
64 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 1028ms
rtt min/avg/max/mdev = 0.294/0.322/0.350/0.028 ms

        最后在确认可以 ping 通远端设备的情况下:

        a. 从飞腾派开发板登录远程设备

user@phytiumpi:~$ ssh phytium@10.10.80.170
The authenticity of host '10.10.80.170 (10.10.80.170)' can't be established. 
ECDSA key fingerprint is
SHA256:C7MVQ7GzEb4EKkINKnrEfmQ/Cu0VkpRzypMbeHgpJEw. 
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: 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.aspx
Last login: Fri Jun 9 15:08:07 2023 from 10.10.80.177
phytium@phytium-d2000:~$

        b. 从远程设备登录飞腾派开发板 (password: user)

$ ssh user@10.10.80.174
The authenticity of host '10.10.80.174 (10.10.80.174)' can't be established. 
ECDSA key fingerprint is
SHA256:6CzIeVEaWgskwMdXDu/VcnS6c85/S/O4fUWaHdTVJY0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: 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 the
individual files in /usr/share/doc/*/copyright. 

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law. 
Last login: Wed Aug 9 18:13:43 2023 from 10.10.80.198
user@phytiumpi:~$

2.7 使用调试串口

        串口连接请参考《飞腾派_V2 硬件规格书》中的调试串口位置(管脚 8,10,12),连接串口。

        串口终端程序必须设置为:

                波特率:115200

                数据位:8

                奇偶校验:无

                停止位:1

        系统调试串口下的用户有 user 和 root

                用户名:user;密码:user

                用户名:root;密码:root

 2.8 软件安装

        可以在命令行终端中通过 apt-get install 来安装,或者在图形界面中双击.deb 包文件进行安装。其他的 Debian 使用问题可以参考如下文档: https://www.debian.org/doc/manuals/debian-reference/

3 飞腾派OS开发指南

3.1 构建飞腾派OS

        飞腾派OS是由 Buildroot 生成的,buildroot 是一种简单、高效且易于使用的工具,可以通过交叉编译 在 主 机 系 统 上 生 成 飞 腾 派 OS 的 镜 像 文件。可以参考https://buildroot.org/downloads/manual/manual.html

        我们只支持在 ubuntu20.04、ubuntu22.04、debian11 这三种主机系统上运行Buildroot,不支持其他系统。 首先,Buildroot 需要主机系统上安装如下 Linux 程序,请检查是否已安装:

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 
- bc
Source fetching tools: 
- wget 
- git

        除此之外,还需要安装如下软件包:

$ sudo apt install debootstrap qemu-user-static binfmt-support debian-archive-keyring

        对于 debian11 系统,需要设置 PATH 环境变量:

$ PATH=$PATH:/usr/sbin

3.1.1 下载 phytium-pi-os

$ git clone https://gitee.com:phytium_embedded/phytium-pi-os.git

3.1.2 基本 defconfig

        飞腾派构建的文件系统的配置文件位于 configs 目录。

        在 phytium-pi-os 根目录下执行$ make list-defconfigs,返回 configs 目录中的defconfig配置文件。

$ make list-defconfigs

        其中以 phytium 开头的为飞腾派相关的 defconfig 配置文件,包含:

phytiumpi_defconfig     - Build for phytiumpi (without desktop)
phytiumpi_desktop_defconfig     - Build for phytiumpi_desktop

3.1.3 编译 SD 卡镜像

        (1)加载 defconfig

$ make phytiumpi_xxx_defconfig

        (2)编译

$ make

(3)镜像的输出位置

        生成的根文件系统、内核位于 output/images 目录。 sdcard.img 就是SD 的镜像文件。

 3.1.4 EtherCAT config

        编译 ethercat,关于 ethercat 的信息请参考:https://gitee.com/phytium_embedded/ether-cat         支持将 ethercat 驱动及用户态的库、工具编译安装到 debian 系统上。如果需要编译ethercat 请执行:

        (1)使用 phytiumpi_xxx_defconfig 作为基础配置项,在 phytiumpi_xxx_defconfig中加入支持rt内核,及 ethercat 的配置:

$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfig
configs/phytiumpi_linux_5.10_rt.config configs/phytiumpi_ethercat.config

        (2)编译

$ make

3.1.5 Xenomai Config

        编译 xenomai,关于 xenomai 的信息请参考:

        https://gitee.com/phytium_embedded/linux-kernel-xenomai

        支持将 xenomai 内核及用户态的库、工具编译安装到飞腾派 OS 上。如果需要编译xenomai 请执行:

        (1)使用 phytiumpi_xxx_defconfig 作为基础配置项,在 phytiumpi_xxx_defconfig 加入xenomai 的配置:

$ ./support/kconfig/merge_config.sh configs/phytiumpi_xxx_defconfig
configs/phytiumpi_xenomai_xxx.config

        phytiumpi_xenomai_xxx.config 为以下配置片段文件之一:

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)

        (2)编译

$ make

3.1.6 清理编译结果

        (1)make clean

        删除所有编译结果,包括 output 目录下的所有内容。当编译完一个文件系统后,编译另一个文件系统前,需要执行此命令。

        (2)make distclean

        重置 buildroot,删除所有编译结果、下载目录以及配置。

3.2 使用新内核

3.2.1 交叉编译内核

        如果用户想自己手工命令构建内核,设备树以及内核模块,可以按照该章节操作。

        在 x86 交叉编译 arm64 内核,推荐使用编译器的链接如下: 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

        将其解压缩到/opt 目录后,然后设置环境变量,操作步骤如下:

$ 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

        从如下网址下载 Rt 内核源代码(以 Rt 内核为例):

https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt 

        第一步:进入内核根目录下,按照下述步骤配置和编译 Rt 内核

$ make phytiumpi_firefly_defconfig
$ make

       其中内核的名称是 Image,设备树的名称是 phytiumpi_firefly.dtb。

       第二步:由于内核很多模块编译成 ko,所以需要手工生成 ko 的安装目录和文件:

       在内核当前目录下创建 build 目录,作为 ko 的安装目录。当然用户可以设置任何目录为安装目录。

$ mkdir build

        设置 build 目录为安装目录

$ export INSTALL_MOD_PATH=`pwd`/build

        安装模块

$ make modules_install

        查看模块

$ ls build/lib/modules/
5.10.153-rt76-phytium-embeded-2023-v1.0-GA

        其中,模块名称分 2 部分,第一部分“5.10.153-rt76-phytium-embeded”不会变化,第二部分“-v1.0-GA”会随着版本的不断更新而持续更新,本章节后续章节描述内核模块以不变部分为准。

        第三步:将 SD 卡插到 USB 读卡器上,然后插到交叉编译机上,假设读卡器的设备节点为sdc,将内核和设备树安装到 SD 卡的/boot 目录(注意提前备份旧的内核和设备树以及内核模块)。

$ 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/

        然后将配套的内核模块安装到/lib/modules

$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /mnt/lib/modules-R
$ sudo umount /mnt

3.2.2 飞腾派开发板上编译内核

        开发板启动注册之后需要安装如下软件,这些软件包如果没有安装,编译内核的时候可能失败。

$ sudo apt-get install autoconf automake libtool fuse debhelper findutils autotools-dev pkg-config libltdl-dev flex bison device-tree-compiler libssl-dev

        从如下网址下载 Rt 内核源代码(以 Rt 内核为例): https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10-rt

        第一步:进入内核根目录下,按照下述步骤配置和编译 Rt 内核

$ make phytiumpi_firefly_defconfig
$ make

        其中内核的名称是 Image,设备树的名称是 phytiumpi_firefly.dtb。

        第二步:由于内核很多模块编译成 ko,所以需要手工生成 ko 的安装目录和文件:

        在内核当前目录下创建 build 目录,作为 ko 的安装目录。当然用户可以设置任何目录为安装目录。

$ mkdir build

        设置 build 目录为安装目录

$ export INSTALL_MOD_PATH=`pwd`/build

        安装模块

$ make modules_install

        查看模块

$ ls build/lib/modules/
5.10.153-rt76-phytium-embeded-2023-v1.0-GA

        其中,模块名称分 2 部分,第一部分“5.10.153-rt76-phytium-embeded”不会变化,第二部分“-v1.0-GA”会随着版本的不断更新而持续更新,本章节后续章节描述内核模块以不变部分为准。

        第三步:将内核和设备树安装到/boot 目录(注意提前备份旧的内核和设备树以及内核模块)。

$ sudo cp arch/arm64/boot/Image /boot/
$ sudo cp arch/arm64/boot/dts/phytium/phytiumpi_firefly.dtb /boot/

         然后将配套的内核模块安装到/lib/modules

$ sudo cp build/lib/modules/5.10.153-rt76-phytium-embeded /lib/modules -R
$ sudo umount /mnt

        与交叉编译内核相比,显然在飞腾派开发板上编译内核上步骤简洁,更换内核也更方便。但是实际上,在飞腾开发板上编译内核速度很慢,效率很低,因为在一般情况下,飞腾派开发板的CPU的性能比交叉编译机会差很多。

3.2.3 启动新内核

        启动开发板,然后在 Uboot 启动阶段敲击键盘的回车键,这时系统会停留在Uboot 的Shell 界面,如下所示。

AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
SATA link 0 timeout. AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
Hit any key to stop autoboot: 0     // 红颜色打印信息回显后键入回车字符
E2000#     // 这时进入 Uboot 的 Shell 界面
E2000#setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000
root=/dev/mmcblk0p1 rootwait rw
E2000#ext4load mmc 0:1 0x90100000
home/user/test/5.10.153-phytium-embeded-rt/Image
28692992 bytes read in 6293 ms (4.3 MiB/s)
E2000#ext4load mmc 0:1 0x90000000
home/user/test/5.10.153-phytium-embeded-rt/phytiumpi_firefly.dtb
25125 bytes read in 13 ms (1.8 MiB/s)
E2000#booti 0x90100000 - 0x90000000

        在 Uboot 的 shell 菜单按照如下步骤引导内核和设备树启动。

        第一步:设置启动参数,其中,嵌入式 Linux 文件系统

E2000# setenv bootargs console=ttyAMA1,115200 earlycon=pl011,0x2800d000
root=/dev/mmcblk0p1 rootwait rw;

        第二步:加载内核到内存

E2000# ext4load mmc 0:1 0x90100000 boot/Image;

        这时,串口会打印如下信息提示加载成功

28692992 bytes read in 6293 ms (4.3 MiB/s)

        第三步:加载设备树到内存

E2000# ext4load mmc 0:1 0x90000000 boot/phytiumpi_firefly.dtb;

        这时,串口会打印如下信息提示加载成功

25125 bytes read in 13 ms (1.8 MiB/s)

        第四步:引导启动内核

E2000# booti 0x90100000 – 0x90000000;

        打印信息如下

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 ... OK
run in ft_board_setup
fdt_addr 00000000f9c32000
N: Phytium System Service Call: 0xc2000005
mb_count = 0x1
mb_blocks[0].mb_size = 0x7c000000
mb_blocks[1].mb_size = 0xffa16920
fdt : 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 Pi
phytiumpi login:     // Linux Shell 提示界面

        这时,输入用户名 user 和密码 user 进入 Linux shell。

3.3 使用内核模块

        linux-headers 包含构建内核外部模块所需的头文件,buildroot 构建会生成linux-headers。关于如何编译内核外部模块,可参考 https://www.kernel.org/doc/html/latest/kbuild/modules.html

3.3.1 交叉编译内核模块

        buildroot 构建会在 output/target/usr/src 目录中安装 linux-headers-version。使用 buildroot 的工具链来交叉编译内核模块,buildroot 工具链位于output/host/bin,工具链的sysroot 为 output/host/aarch64-buildroot-linux-gnu/sysroot。

        交叉编译内核外部模块的命令为:

$ 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-embede
d \
M=$PWD \
modules

3.3.2 飞腾派开发板上编译内核模块

         buildroot 将 linux-headers-version 安装在根文件系统的/usr/src 目录下,并为它创建了一个软链接/lib/modules/version/build。

        注意,由于 linux-headers 是在 x86-64 主机交叉编译生成的,在开发板上直接使用它编译内核模块会报错:

/bin/sh: 1: scripts/basic/fixdep: Exec format error

        因此,需要将 x86-64 格式的 fixdep 等文件替换为 ARM aarch64 格式的(以linux 5.10内核为例):

        (1)在开发板上执行:

scp -r
username@host:/home/xxx/phytiumpios/board/phytium/common/linux-5.10/scripts
/usr/src/linux-headers-5.10.153-phytium-embeded

        在开发板上编译内核外部模块的命令为:

make -C /lib/modules/5.10.153-phytium-embeded/build M=$PWD modules

3.4 buildroot 编译新的应用软件

        本节简单介绍如何通过 buildroot 交叉编译能运行在开发板上的应用软件,完整的教程请参考

https://buildroot.org/downloads/manual/manual.html

3.4.1 buildroot 软件包介绍

         buildroot 中所有用户态的软件包都在 package 目录,每个软件包有自己的目录package/,其中是小写的软件包名。这个目录包含:

        (1)Config.in 文件,用 Kconfig 语言编写,描述了包的配置选项。

        (2).mk 文件,用 make 编写,描述了包如何构建,即从哪里获取源码,如何编译和安装等。

        (3).hash 文件,提供 hash 值,检查下载文件的完整性,如检查下载的软件包源码是否完整,这个文件是可选的。

        (4)*.patch 文件,在编译之前应用于源码的补丁文件,这个文件是可选的。(5)可能对包有用的其他文件。

3.4.2 编写 buildroot 软件包

        首先创建软件包的目录 package/<pkg>,然后编写该软件包中的文件。

buildroot 中的软件包基本上由 Config.in 和.mk 两个文件组成。关于如何编写这两个文件,大家可以参考 buildroot 用户手册,这里简单概括一下。

        (1)Config.in 文件中必须包含启用或禁用该包的选项,而且必须命名为BR2_PACKAGE_,其中<PKG>是大写的软件包名,这个选项的值是布尔类型。也可以定义其他功能选项来进一步配置该软件包。然后还必须在 package/Config.in 文件中包含该文件:

source "package/<pkg>/Config.in"

        (2)<pkg>.mk 文件看起来不像普通的 Makefile 文件,而是一连串的变量定义,而且必须以大写的包名作为变量的前缀。最后以调用软件包的基础结构(package infrastructure)结束。变量告诉软件包的基础结构要做什么。

         对于使用手写 Makefile 来编译的软件源码,在<pkg>.mk 中调用 generic-package基础结构。generic-package 基础结构实现了包的下载、提取、打补丁。而配置、编译和安装由<pkg>.mk文件描述。<pkg>.mk 文件中可以设置的变量及其含义,请参考 buildroot 用户手册。

3.4.3 编译软件包

        (1)单独编译软件包

$ cd xxx/phytiumpios
$ make <pkg>

         编译结果在 output/build/- <pkg>-<version>

        (2)将软件包编译进根文件系统

        在 phytiumpi_xxx_defconfig 中添加一行 BR2_PACKAGE_<pkg>=y

$ make phytiumpi_xxx_defconfig
$ make

扩展资料

https://gitee.com/phytium_embedded/phytium-embedded-docs


 

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。

  • 45
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值