SDK 环境部署(PC端)
LuckfoxPico-SDK主要在Ubuntu LTS系统上进行开发和测试,主要支持Ubuntu 22.04版本。如果您的系统是Ubuntu 22.04,只需安装相应的依赖编译即可。为了确保与不同版本的Ubuntu兼容,我们还为用户提供了一个方便使用的 Docker 环境。注意:按照文档的步骤配置就能成功编译镜像,如果出现错误请检查自己的环境。例如:使用WSL2
编译出现环境变量的错误Your PATH contains spaces, TABs, and/or newline (\n) characters This doesn't work. Fix yOu PATH
,就需要过滤空格、制表符和换行符。
export PATH=$(echo "$PATH" | tr -d ' \t\n')
1. Ubuntu22.04 环境下编译镜像
1.1 搭建编译环境
安装依赖环境:
sudo apt update
sudo apt-get install -y git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config bc python-is-python3 passwd openssl openssh-server openssh-client vim file cpio rsync获取最新的 SDK :
git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
编译镜像
luckfox@luckfox:~$ ./build.sh lunch
You're building on Linux
Lunch menu...pick the Luckfox Pico hardware version:
选择 Luckfox Pico 硬件版本:
[0] RV1103_Luckfox_Pico
[1] RV1103_Luckfox_Pico_Mini_A
[2] RV1103_Luckfox_Pico_Mini_B
[3] RV1103_Luckfox_Pico_Plus
[4] RV1106_Luckfox_Pico_Pro_Max
[5] RV1106_Luckfox_Pico_Ultra
[6] RV1106_Luckfox_Pico_Ultra_W
[7] custom
Which would you like? [0~7][default:0]: 3
Lunch menu...pick the boot medium:
选择启动媒介:
[0] SD_CARD
[1] SPI_NAND
Which would you like? [0~1][default:0]: 1
Lunch menu...pick the system version:
选择系统版本:
[0] Buildroot(Support Rockchip official features)
Which would you like? [0~1][default:0]: 0
[build.sh:info] Lunching for Default BoardConfig_IPC/BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk boards...
[build.sh:info] Running build_select_board succeeded.
luckfox@luckfox:~$ ./build.sh
1.2 SDK 目录说明
SDK目录结构
├── build.sh -> project/build.sh ---- SDK编译脚本
├── media --------------------------- 多媒体编解码、ISP等算法相关(可独立SDK编译)
├── sysdrv -------------------------- U-Boot、kernel、rootfs目录(可独立SDK编译)
├── project ------------------------- 参考应用、编译配置以及脚本目录
├── output -------------------------- SDK编译后镜像文件存放目录
└── tools --------------------------- 烧录镜像打包工具以及烧录工具镜像存放目录
output/
├── image
│ ├── download.bin ---------------- 烧录工具升级通讯的设备端程序,只会下载到板子内存
│ ├── env.img --------------------- 包含分区表和启动参数
│ ├── uboot.img ------------------- uboot镜像
│ ├── idblock.img ----------------- loader镜像
│ ├── boot.img -------------------- kernel镜像
│ ├── rootfs.img ------------------ kernel镜像
│ └── userdata.img ---------------- userdata镜像
└── out
├── app_out --------------------- 参考应用编译后的文件
├── media_out ------------------- media相关编译后的文件
├── rootfs_xxx ------------------ 文件系统打包目录
├── S20linkmount ---------------- 分区挂载脚本
├── sysdrv_out ------------------ sysdrv编译后的文件
└── userdata -------------------- userdata
1.3 SDK配置文件说明
Luckfox-Pico 系列 SDK 配置文件存放在 project/cfg/BoardConfig_IPC 目录下。
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra_W-IPC.mk
BoardConfig-EMMC-Ubuntu-RV1106_Luckfox_Pico_Ultra-IPC.mk
BoardConfig-EMMC-Ubuntu-RV1106_Luckfox_Pico_Ultra_W-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Mini_A-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Mini_B-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
BoardConfig-SD_CARD-Ubuntu-RV1103_Luckfox_Pico-IPC.mk
BoardConfig-SD_CARD-Ubuntu-RV1103_Luckfox_Pico_Mini_A-IPC.mk
BoardConfig-SD_CARD-Ubuntu-RV1103_Luckfox_Pico_Mini_B-IPC.mk
BoardConfig-SD_CARD-Ubuntu-RV1103_Luckfox_Pico_Plus-IPC.mk
BoardConfig-SD_CARD-Ubuntu-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Mini_B-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
rv1103-spi_nor-post.sh
rv1106-spi_nor-post.sh我们将以 'BoardConfig-EMMC-Ubuntu-RV1106_Luckfox_Pico_Pro_Max-IPC.mk' 为例,详细介绍其中关键的文件配置。
# Config CMA size in environment
export RK_BOOTARGS_CMA_SIZE="66M"
# Kernel dts
export RK_KERNEL_DTS=rv1106g-luckfox-pico-pro-max.dts
# Target boot medium: emmc/spi_nor/spi_nand
export RK_BOOT_MEDIUM=emmc
export RK_PARTITION_CMD_IN_ENV="32K(env),512K@32K(idblock),256K(uboot),32M(boot),512M(oem),256M(userdata),6G(rootfs),-(media)"
# Target rootfs : ubuntu(only emmc)/buildroot/busybox
export LF_TARGET_ROOTFS=ubuntu
# SUBMODULES : gitee/gitee
export LF_SUBMODULES_BY=gitee
# Buildroot defconfig
export RK_BUILDROOT_DEFCONFIG=luckfox_pico_defconfigRK_BOOTARGS_CMA_SIZE
:给摄像头分配的内存,如果不使用摄像头可以将其修改为 1MRK_KERNEL_DTS
:指定设备树文件RK_BOOT_MEDIUM
:指定目标启动介质,可以是 emmc(指的是SD卡)、spi_nor(SPI NOR Flash)或 spi_nand(SPI NAND Flash)RK_PARTITION_CMD_IN_ENV
:这是用于配置分区表的信息,如果需要与 SD 卡的存储空间匹配,您可以修改 rootfs 分区。LF_TARGET_ROOTFS
:指定目标的根文件系统(Root File System)LF_SUBMODULES_BY
:指定子模块的来源RK_BUILDROOT_DEFCONFIG
:指定 Buildroot 的配置文件
1.4 编译镜像
从《1.3 SDK配置文件说明》可以得知,Ubuntu 镜像仅支持 SD 卡启动,而 Buildroot 镜像既支持TF卡启动又支持 SPI NAND FLASH 启动。
如果需要编译ubuntu系统,并且使用gitee源,请修改对应的板型mk文件中LF_SUBMODULES_BY改为gitee,如:
LF_SUBMODULES_BY=gitee
安装交叉编译工具链:
cd {SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
source env_install_toolchain.sh全部编译镜像:
cd luckfox-pico
#编译busybox/buildroot
./build.sh lunch
./build.sh
#编译ubuntu
sudo ./build.sh lunch
sudo ./build.sh- 注意编译ubuntu时需要注意使用sudo,否则会导致文件系统错误
- 下文就不一一区分两者指令区别,请自行根据情况选择
1.4.1 部分编译
单独编译U-Boot
./build.sh clean uboot
./build.sh uboot- 生成镜像文件: output/image/MiniLoaderAll.bin output/image/uboot.img
单独编译kernel
./build.sh clean kernel
./build.sh kernel- 生成镜像文件: output/image/boot.img
单独编译rootfs
./build.sh clean rootfs
./build.sh rootfs- 注:编译后需使用
./build.sh firmware
命令重新打包
- 注:编译后需使用
单独编译media
./build.sh clean media
./build.sh media- 生成文件的存放目录:output/out/media_out ,编译后需使用
./build.sh firmware
命令重新打包
- 生成文件的存放目录:output/out/media_out ,编译后需使用
单独编译参考应用
./build.sh clean app
./build.sh app- 注1:app依赖media
- 注2:编译后需使用
./build.sh firmware
命令重新打包
固件打包
./build.sh firmware
2. Docker 环境
版本 | 描述 | 下载 |
---|---|---|
luckfoxtech/luckfox_pico 1.0 | Docker镜像离线下载 | Docker百度网盘链接 |
如果docker pull
失败,可以用离线方式获取。
#docker镜像安装
sudo docker load -i ./luckfox_pico_docker.tar
2.1 Docker简介
Docker是一种轻量级的容器化平台,用于打包、分发和运行应用程序及其依赖关系。它利用容器技术,将应用程序及其所有运行时环境封装在一个可移植的容器中。这使得应用程序可以在任何支持Docker的环境中一致地运行,提高了开发、部署和扩展的效率。 Docker通过使用镜像来定义应用程序和环境,使得容器可以在不同的操作系统和云平台上无缝运行。
2.2 Docker 概念
容器: Docker 使用容器来封装应用程序及其所有依赖关系,包括代码、运行时、系统工具、系统库等。容器提供了一种轻量级、一致性和可移植性的方式,使应用程序能够在不同环境中运行。
镜像: 镜像是容器的基础,它包含了运行容器所需的所有信息,如文件系统、库、配置等。镜像可以被共享、存储在仓库中,并通过网络传输。
仓库: 仓库是用于存储和组织 Docker 镜像的地方。公共仓库如 Docker Hub 提供了许多常见的镜像,同时用户也可以创建私有仓库。
2.3 Docker 下载
下载安装 docker :
sudo apt install docker.io -y
2.4 将用户添加到 Docker 组
在Ubuntu系统上,需要在运行Docker命令时添加 sudo 是因为 Docker 守护进程默认以 root 用户权限运行。Docker 执行一些需要特权权限的操作,如访问系统资源、管理容器、构建镜像、挂载文件系统等,以确保安全性和系统稳定性。如果希望不每次都使用 sudo 运行 Docker 命令,可以将当前用户加入 docker 组。
运行以下命令将当前用户添加到docker组中:
sudo usermod -aG docker $USER
注销并重新登录,或者运行以下命令使更改生效:
sudo service docker restart
newgrp docker确保用户 luckfox 已经成功添加到 docker 组。可以使用以下命令检查:
id luckfox
2.5 Docker 常用命令
以下是 Docker 的一部分命令。要查看完整的命令列表和帮助信息,请运行 docker --help
。
镜像相关命令:
docker pull luckfoxtech/luckfox_pico:1.0 #从 Docker Hub 下载镜像。
docker images #列出本地所有的镜像。
docker rmi luckfoxtech/luckfox_pico:1.0 #删除本地一个或多个镜像。
docker search [image] #在 Docker Hub 上搜索镜像。容器相关命令:
docker ps #列出当前运行的容器。
docker ps -a #列出所有的容器,包括停止的。
luckfox@luckfox:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
1758ef6954f6 luckfoxtech/luckfox_pico:1.0 "/bin/bash" 2 weeks ago Exited (137) 39 minutes ago容器操作:
docker start 1758 #启动一个停止的容器。
docker stop 1758 #停止一个运行中的容器。
docker restart 1758 #重启一个容器。
docker exec -it 1758 ls #在运行中的容器中执行命令。
docker exec -it 1758 bash #进入一个已经打开的容器
exit #退出
docker rm 1758 #删除一个或多个容器。运行容器:
sudo docker run -it --name luckfox --privileged -v /home/ubuntu/luckfox-pico:/home luckfoxtech/luckfox_pico:1.0 /bin/bash
-it
运行一个交互式容器--name
可以为容器指定一个名称,使得容器更易于识别和管理-v
选项可以将主机上的目录或文件挂载到容器内部。上述例子中,将主机上的/home/ubuntu/luckfox-pico
目录挂载到容器内的/home
目录
系统信息:
docker logs 1758 #查看容器的日志。
docker inspect 1758 #查看容器的详细信息。
docker top 1758 #查看容器中运行的进程。- 注:通常你只需要提供容器的前几位字符作为容器的 ID,由于 Docker 容器的 ID 是唯一的。前几位字符通常足以唯一标识一个容器。使用命令时请替换自己的实际容器 ID。
2.6 编译SDK
获取已经配置好的官方 Docker 镜像。
sudo docker pull luckfoxtech/luckfox_pico:1.0
获取最新的的 SDK使用如下指令下载 。
git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
cd luckfox-pico
git submodule update --init启动一个交互式的容器,使用名为 "luckfox",并将本地主机上的 SDK 目录映射到容器内的 /home 目录,最后以 Bash shell 运行。
#第一次运行docker环境
sudo docker run -it --name luckfox --privileged -v /home/ubuntu/luckfox-pico:/home luckfoxtech/luckfox_pico:1.0 /bin/bash
#第二次运行docker环境
sudo docker start -ai luckfox
#退出
exit安装交叉编译工具链。
cd tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
source env_install_toolchain.sh
进入/home 目录,清除编译。
root@b165d8d4c29b:# cd /home
root@b165d8d4c29b:/home# ./build.sh clean编译选择分支,分别是指定 LuckFox Pico 、LuckFox Pico Mini A 、LuckFox Pico Mini B、LuckFox Pico Plus 和 LuckFox Pico Pro/Max。
root@22259b5440c0:/home# ./build.sh lunch
You're building on Linux
Lunch menu...pick the Luckfox Pico hardware version:
选择 Luckfox Pico 硬件版本:
[0] RV1103_Luckfox_Pico
[1] RV1103_Luckfox_Pico_Mini_A
[2] RV1103_Luckfox_Pico_Mini_B
[3] RV1103_Luckfox_Pico_Plus
[4] RV1106_Luckfox_Pico_Pro_Max
[5] RV1106_Luckfox_Pico_Ultra
[6] RV1106_Luckfox_Pico_Ultra_W
[7] custom
Which would you like? [0~7][default:0]: 3
Lunch menu...pick the boot medium:
选择启动媒介:
[0] SD_CARD
[1] SPI_NAND
Which would you like? [0~1][default:0]: 1
Lunch menu...pick the system version:
选择系统版本:
[0] Buildroot(Support Rockchip official features)
Which would you like? [0~1][default:0]: 0
[build.sh:info] Lunching for Default BoardConfig_IPC/BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk boards...
[build.sh:info] Running build_select_board succeeded.全部编译镜像。
root@b165d8d4c29b:/home# ./build.sh
....
Make firmware OK!
------ OK ------
********rkImageMaker ver 2.2********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
[mk-update_pack.sh:info] Making -RK1106 update.img OK.
[build.sh:info] Running build_updateimg succeeded.
[build.sh:info] Running build_firmware succeeded.
[build.sh:info] Running build_all succeeded.
save to /home/luckfox/Luckfox-Pico/luckfox-pico/IMAGE/SPI_NAND_RV1103G-LUCKFOX-PICO-PLUS.DTS_20230816.1811_RELEASE_TEST
[build.sh:info] Running build_save succeeded.
[build.sh:info] Running build_allsave succeeded.编译成功后,固件存放在 SDK目录/output/image 目录下。
清除文件,方便重新编译,有一些配置文件修改后,需要执行这个命令后,在重新编译才能生效 。
./build.sh clean
3. 文件共享
虚拟机和 Windows 电脑之间文件传输可以使用 Samba 服务来实现文件共享,在 Windows 的网络邻居中,可以轻松访问虚拟机的文件系统,非常便捷。
3.1 Ubuntu 环境配置
下载和安装 Samba 。
sudo apt-get update
sudo apt-get install samba -y配置Samba服务。
sudo vim /etc/samba/smb.conf
#在文件末尾填入以下内容
[share]
comment = share folder
browseable = yes
path = /home/luckfox
create mask = 0700
directory mask = 0700
valid users = luckfox
force user = luckfox
force group = luckfox
public = yes
available = yes
writable = yes- 其中luckfox为主机名,根据自己实际主机名填写。
设置分享账户密码。
sudo smbpasswd -a luckfox
查看虚拟机或主机的 IP 地址。
luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.61 netmask 255.255.252.0 broadcast 192.168.11.255
inet6 fe80::814f:a51e:5f24:f0f7 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:d2:60:b9 txqueuelen 1000 (Ethernet)
RX packets 699559 bytes 754875799 (754.8 MB)
RX errors 0 dropped 4 overruns 0 frame 0
TX packets 53024 bytes 3278048 (3.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 190 bytes 24144 (24.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 190 bytes 24144 (24.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.2 Windows 环境
在 Windows 地址栏输入(根据自己实际 IP 地址填写)。
输入虚拟机账户密码默认都是 luckfox 。
成功登录虚拟机或主机。
4. 修改设备树
Luckfox Pico和Luckfox Mini系列开发板的用户,如果在硬件上进行了自行升级以支持网口功能,为了能够正常使用有线网络,还需要手动在设备树中进行相应的配置。
进入 /luckfox/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts 目录下修改设备树文件。
$ ls | grep luckfox*
rv1103g-luckfox-pico.dts
rv1103g-luckfox-pico-mini-a.dts
rv1103g-luckfox-pico-mini-b.dts
rv1103g-luckfox-pico-plus.dts
rv1103-luckfox-pico-ipc.dtsi
rv1106g-luckfox-pico-pro-max.dts
rv1106g-luckfox-pico-ultra.dts
rv1106g-luckfox-pico-ultra-w.dts
rv1106-luckfox-pico-pro-max-ipc.dtsi
rv1106-luckfox-pico-ultra-ipc.dtsi打开 rv1103g-luckfox-pico.dts 设备树文件,将 gmac 下的 “disable ”修改为“okay”,保存退出。
重新编译固件。
./build.sh clean
./build.sh
5. Linux下加载ko驱动模块
5.1 ko 文件简介
在Linux操作系统中,.ko文件是内核模块文件的扩展名。内核模块是一种可以在运行时加载和卸载的代码,用于扩展Linux内核的功能,无需重新编译整个内核。每个.ko文件包含模块的代码和元数据,允许用户在不重新启动系统的情况下添加或移除特定功能,如驱动程序或文件系统支持。
5.2 ko文件的优点
- 动态加载和卸载:内核模块可以在运行时动态加载到内核中,也可以随时卸载,无需重新启动系统。这使得系统管理员和开发人员能够在不中断系统运行的情况下添加、测试或修复功能。
- 节约资源:内核模块允许将不常用的功能作为模块加载,从而减少了系统内核的大小和内存占用。这有助于提高系统的资源利用率。
- 定制性: 内核模块允许用户根据需要添加或移除特定功能,从而实现定制化的系统。这对于嵌入式系统、特定硬件支持和特定应用场景非常有用。
- 减少编译时间: 重新编译整个内核可能会花费大量时间,而使用内核模块则可以避免这种情况。只需编译和加载所需的模块,节省了时间和资源。
- 快速调试和开发:内核模块可以在不重新启动系统的情况下加载和卸载,这使得驱动程序和其他内核代码的调试和开发变得更加高效。
- 易于维护: 内核模块的独立性使得它们可以独立于整个内核进行维护和升级。这有助于降低系统维护的复杂性。
- 增加兼容性:内核模块可以根据需要支持多个内核版本,从而增加了软件的兼容性和灵活性。
5.3 应用实例
下载工程文件戳我下载,整个工程只有两个文件,一个helloworld.c,一个用来控制编译的Makefile。
将工程文件复制到已经安装了编译通过的 Luckfox Pico SDK 的 Ubuntu 主机或虚拟机上。
打开、修改 Makefile 文件让 make 命令进入指定的内核源代码目录也就是 Luckfox Pico SDK目录/luckfox-pico/sysdrv/source/kernel 。(Makefile 文件建议直接下载使用,复制粘贴需自己修改Tab缩进问题)
obj-m += helloworld.o
KDIR:=/home/luckfox/Luckfox-Pico/luckfox-pico/sysdrv/source/kernel
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
echo $(PWD)
clean:
rm -f *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order代码部分:
#include <linux/module.h>
#include <linux/init.h>
static int helloworld_init(void)
{
printk("helloworld!\n");
return 0;
}
static void helloworld_exit(void)
{
printk("helloworld bye\n");
}
module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Luckfox");
MODULE_VERSION("V1.0");- 模块加载函数:当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 Linux内核模块加载函数一般以__init标识声明,模块加载函数以“module_init(函数名)”的形式被指定。它返回整型值,若初始化成功,应返回0。而在初始化失败时,应该返回错误编码。在Linux内核里,错误编码是一个接近于0的负值。
- 模块卸载函数:当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块卸载函数相反的功能。 Linux内核模块加载函数一般以__exit标识声明,模块卸载函数在模块卸载的时候执行,而不返回任何值,且必须以“module_exit(函数名)”的形式来指定。
- 模块许可证声明许可证(LICENSE):明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核被污染(Kernel Tainted)的警告。在Linux内核模块领域,可接受的LICENSE包括“GPL”、“GPL v2”、“GPLand additional rights”、“Dual BSD/GPL”、“Dual MPL/GPL”和“Proprietary”(关于模块是否可以采用非GPL许可权,如“Proprietary”,这个在学术界和法律界都有争议)。大多数情况下,内核模块应遵循GPL兼容许可权。Linux内核模块最常见的是以MODULE_LICENSE(“GPL v2”)语句声明模块采用GPL v2。
- 模块作者等信息声明:MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_VERSION、MODULE_DEVICE_TABLE、MODULE_ALIAS分别声明模块的作者、描述、版本、设备表和别名
进入工程文件中,执行以下命令(其中CROSS_COMPILE的地址需要按SDK的实际路径填写):
export ARCH=arm
export CROSS_COMPILE=/home/luckfox/Luckfox-Pico/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-
make- 效果如下:
- 效果如下:
把helloworld.ko上传到开发板上,可以使用TFTP,ADB等方式。
tftp 192.168.10.127 -g -r helloworld.ko
执行以上命令可以进行验证。
# insmod helloworld.ko
[ 200.330884] helloworld!
# rmmod helloworld.ko
[ 218.624421] helloworld bye最后我们使用 dmesg 查看日志。
# dmesg | grep hello
[ 200.330884] helloworld!
[ 218.624421] helloworld bye
6. 内核配置
menuconfig
是 Linux 内核的配置工具,提供终端图形化界面,便于直观地修改配置文件,同时自动处理配置项依赖关系。其他类似的配置界面还包括 nconfig
和 xconfig
,下面介绍 menuconfig
的基本功能和操作。
6.1 配置界面
执行如下指令,打开配置界面:
cd <SDK目录>/sysdrv/source/kernel
cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config
make ARCH=arm menuconfig
6.2 基本操作
执行命令后显示的配置界面如下:
从界面上方我们可以看到 menuconfig 的基本操作和说明。
按键操作:
- ↑↓PgUpPgDn:浏览、选择内核功能
- ←→:选择Select、Exit等操作
- Enter:进入子菜单
- Y:选中这项功能
- N:排除这项功能
- M:以模块的形式选择
- Esc:双击Esc返回上一级菜单
- ?:查看这项功能的帮助信息
- /:搜索
图例说明:
[*]
:已选中的项目[ ]
:未选中的项目<M>
:已选中的项目(以模块形式)< >
:未选中的项目(以模块形式)
中间区域是用户选择各项功能的地方,您可以使用上下方向键进行导航,同时也支持直接按下行首带颜色的字母,跳转到该行,如 Kernel Features 的首字母 K,当我们按下 K 键时就会直接跳转至该行。
底部区域包含了一些常用的操作选项,为用户提供了重要的交互功能。它们的作用如下:
<Select>
:进入当前高亮配置项的子菜单<Exit>
:退出当前菜单,返回上一层<Help>
:提供当前高亮配置项的帮助信息<Save>
:保存当前的配置更改,但不退出配置工具<Load>
:加载指定的配置文件
6.3 功能简述
内核配置界面的中间部分是一个多层级的菜单系统,您可以通过上下方向键进行导航,按 Enter 键进入子菜单,按 Esc 键返回上一级菜单
通过这个界面,用户可以根据系统需求灵活配置内核,选择需要的功能和驱动,以构建适合特定硬件和用途的定制内核,以下是 Linux 内核配置界面中的主要项目:
- General setup(常规设置):运行时的基本配置
- Kernel Features(内核特性):核心功能的配置,如模块化、块设备支持等
- CPU Power Management(CPU 功耗管理):配置 CPU 的功耗管理选项
- Enable loadable module support(启用可加载模块支持):是否支持内核模块
- IO Schedulers(I/O 调度器):配置磁盘 I/O 调度器
- Networking support(网络支持):配置网络支持,包括协议、设备等
- Device Drivers(设备驱动):配置各种设备驱动,如输入设备、USB 设备等
- File systems(文件系统):配置文件系统支持,选择支持的文件系统类型
- Security options(安全选项):配置内核安全相关选项
- Cryptographic API(加密 API):配置加密 API 支持
6.4 修改配置
我们这里以使能dht11为例说明,按下 / 键,输入 dht11 回车进行搜索
搜索结束,仅有一个搜索结果,我们按下 1 进行跳转
跳转到 DHT11 配置项后,按 Y 键使能,完成配置
6.5 保存配置
在 menuconfig
中完成配置后,你可以使用以下步骤保存你的配置:
- 使用左右方向键导航到底部的
< Save >
选项。 - 按回车键,切换到保存界面。
- 输入保存文件名称,默认保存到
.config
文件。
除了上面这种方法,还可以通过连续按 Esc 键来退出。在退出时,系统会询问是否要保存配置文件。如果你希望保存当前的配置,选择 "Yes" 即可,这将更新 .config
文件。选择 "No" 你的配置更改将不会被保存。如果想要继续修改配置而不退出,可以再按两次 Esc 键重新返回 menuconfig 界面继续进行修改。
退出配置界面后执行指令:
make ARCH=arm savedefconfig
cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig
6.6 重烧固件
编译选择分支,指定开发板型号
luckfox@luckfox:~/luckfox-pico$ ./build.sh lunch
编译
luckfox@luckfox:~/luckfox-pico$ ./build.sh
重新烧录固件
编译完成后重新烧录固件
7. Buildroot 配置
Buildroot 是一个专为嵌入式系统设计的工具,其目标是简化嵌入式 Linux 系统的构建过程。通过配置 Buildroot,您可以定制嵌入式系统中包含的软件包和库,以满足特定的需求。本文将演示如何通过配置 Buildroot 添加 iftop、minicom 的软件包以及 python-arrow 库。
7.1 添加软件包
7.1.1 打开配置界面
cd <SDK 目录>/sysdrv/source/buildroot/buildroot-2023.02.6/
make luckfox_pico_w_defconfig
make menuconfig
请注意,刚下载SDK没有 "buildroot-2023.02.6" 这个目录,需要先编译一次SDK:
luckfox@luckfox:~/luckfox-pico$ ./build.sh lunch
luckfox@luckfox:~/luckfox-pico$ ./build.sh
7.1.2 iftop
简介
iftop 是一个实时网络流量监控工具,通过图形界面显示当前系统上各个网络连接的实时流量情况。它能够按流量大小排序并展示每个连接的详细信息,帮助用户迅速定位网络瓶颈或异常流量。
修改配置
按下 / 输入 "iftop" 后回车进行搜索,仅有一个搜索结果,我们按下 1 进行跳转
按下 Y 使能 iftop 软件包
1.3 minicom
简介
Minicom 是一款串口通信工具,类似于 Windows 下的超级终端,主要用于与串口设备进行通信,例如调试交换机和 Modem。它提供了一套简单而有效的命令行界面,支持串口参数的配置和文件传输协议(如 XMODEM、YMODEM)。Minicom 是一个轻量级工具,适用于嵌入式系统开发和串口通信的调试场景。
修改配置
按下 / 输入 "minicom" 后回车进行搜索,仅有一个搜索结果,我们按下 1 进行跳转
按下 Y 使能 minicom 软件包
1.4 保存配置
配置好后连续按 Esc,提示是否保存时选择 "Yes",保存后重新进行编译:
make savedefconfig
make
7.2 添加Python库
我们不仅可以通过配置 Buildroot 添加软件包,还可以添加需要的 Python 库到系统中,下面以添加 python-arrow 库为例说明。
7.2.1 打开配置界面
cd <SDK 目录>/sysdrv/source/buildroot/buildroot-2023.02.6/
make luckfox_pico_defconfig
make menuconfig
7.2.2 修改配置
在配置菜单中,找到并选择 Target packages
,选择 Interpreter languages and scripting
,然后再选择 External python modules
找到需要的库,按 Y 使能
7.2.3 保存配置
配置好后连续按 Esc,提示是否保存时选择 "Yes",保存后重新进行编译:
make savedefconfig
make
7.3 重新烧录固件
编译选择分支,指定开发板型号
luckfox@luckfox:~/luckfox-pico$ ./build.sh lunch
编译
luckfox@luckfox:~/luckfox-pico$ ./build.sh
重新烧录固件
编译完成后重新烧录固件
7.4 运行效果
7.4.1 iftop
执行命令
iftop -i eth0 -P -nNB -m 15M
参数解析
-i eth0
: 指定要监控的网络接口,这里是eth0
。您可以根据需要更改为其他网络接口的名称。-P
: 显示端口号。-n
: 以数字形式显示主机地址而不是域名。-N
: 在主机和服务列中显示端口号,不显示端口对应的服务名称。-B
: 以字节为单位显示流量。-m 15M
: 限制显示的最大带宽为 15 兆比特每秒(Mbps)。
运行效果,按 "L" 显示进度条
7.4.2 minicom
执行命令
minicom -s
执行指令后显示 minicom 配置界面,选择 "Serial port setup"
选中 "Serial port setup" 后按下回车,进入设置菜单
菜单中有 14 个项目,分别对应
A、B...N
,第一个是选择串口设备,这里以 UART3 为例说明,UART3 的设备文件为/dev/ttyS3
,因此串口设备要设置为/dev/ttyS3
。设置方法为首按下 "A" 键,然后输入/dev/ttyS3
,回车确认。同时,这里还可以设置其他的配置项,如E
设置波特率、数据位和停止位、F
设置硬件流控,这里我们按 "F",关闭硬件流控制。设置完后按回车确认,退回到配置界面
按下 "Esc" 退出配置界面,进入串口调试界面,可以看到当前的串口文件为
/dev/ttyS3
在电脑端打开 sscom,波特率设置为115200,连接 Luckfox Pico 的 UART3 后发送数据
Luckfox Pico 成功接收到数据
按下 "CTRL+A",再按下 "Z" 可以打开 minicom 帮助信息界面。从下图可以看出, minicom 有很多功能可以使用, minicom 的回显功能是默认关闭的,对应的配置项为"local Echo on/off…E", 我们按下 "E" 键即可打开/关闭回显功能
在 minicom 通信界面按下 "CTRL+A",再按下 "X" 即可关闭 minicom
7.4.3 python-arrow
执行命令
python3
import arrow成功导入 arrow 库
FAQ
网络原因导致编译
buildroot
时下载诸如expat
和Python
等软件包失败如何解决?答:下载离线包,替换自己的luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/目录下的dl文件夹。
文件名 描述 下载 dl buildroot中的软件包 百度网盘链接