欧拉派 Euler Pi SDK操作指南 (Linux)
1. 概述
由于易百纳技术社区对欧拉派( Euler Pi)适配后的SDK与官方SDK有较大差异,因此提供《Hieuler SDK操作指南(Linux)》文档,为开发者进行开发提供基本的指导。
SDK压缩包文件:03 开发板软件资料/03 易百纳适配SDK/Hieuler_SDK_Linux.tar.gz
2. 描述约定
为了方便描述,做以下描述约定。
- 后续描述SDK解压后的顶层目录时以${SDK_TOP}替代
- 以busybox为基础的嵌入式Linux系统称为Linux系统。构建出的ubuntu系统称为ubuntu系统,由于开发环境也是ubuntu系统,具体指PC端还是构建出的板端ubuntu系统视具体语境判断。
- 将Linux内核源码目录树中包含的驱动(或者说内核自带的驱动)描述为Linux树内驱动,相对应的单独作为模块在外部编译的驱动称为Linux树外驱动
3. 环境搭建
【待更新】
4. 目录结构
下面先介绍SDK的顶层目录与输出目录,其它目录涉及到相关功能时再做详细介绍
4.1 SDK顶层目录
├── busybox-1.31.1 # busybox 构建Linux系统是可以通过修改busybox配置添加新功能
├── externed_device_sample # 一些例程,在构建出的Linux和ubuntu系统都包含这些例程
├── linux-4.19.90 # Linux内核
├── Makefile # 主Makefile,用于控制构建
├── modules # Linux目录树之外的驱动
├── mpp # 海思MPP依赖库与相关驱动文件
├── output # 构建后的输出目录,在SDK解压之后没有这个文件,
├── rootfs # 根文件系统的构建脚本
├── tools # 其它板端和PC端的工具
├── trusted-firmware-a-2.2 # 与Linux ATF相关
└── u-boot # u-boot
下面从boot、kernel、rootfs三大件的方式重新介绍,方便用户理解目录结构。
graph LR
boot(boot相关)—>u-boot(u-boot)
kernel(内核相关)—>linux-4.19.90(linux-4.19.90)
kernel—>atf(trusted-firmware-a-2.2)
rootfs(根文件系统相关)—>rootfs_script(rootfs)
rootfs—>modules(modules)
rootfs—>tools(tools)
rootfs—>texterned_device_sample(externed_device_sample)
rootfs—>busybox-1.31.1(busybox-1.31.1)
rootfs—>mpp(mpp)
4.2 目录结构
├── boot_image_8G.bin # uboot镜像
├── boot_env_8G.bin # uboot环境变量分区,用于管理uboot环境变量
├── kernel # 内核
├── rootfs # 根文件系统,目录结构的形式(用于查看构建出的rootfs是否正常)
└── rootfs.ext4 # 根文件系统ext4格式的镜像包(可烧录)
5. 构建选项
构建输出时通过顶层的Makefile进行操作,如果直接在子目录中执行make往往会因为缺少环境变量而导致失败,因此建议在顶层目录进行构建。
目前支持以下构建选项,如果不清楚他们的作用可以直接输入make即可构建出默认的烧录固件
u-boot 构建uboot,包括boot_image和boot_env(此时需要指定MEM_SIZE,根据核心板的内存大小,
默认为8G)
ubootcfg 进入uboot的menuconfig界面,配置保存之后自动保存到默认配置
kernel 构建内核(该内核构建后不能烧录,也不会出现再output目录中)
atf 构建可烧录的内核
kernelcfg 进入kernel的menuconfig界面,配置保存之后自动保存到默认配置
modules 构建驱动模块,即在menuconfig界面配置为以模块构建的
busybox 构建busybox
busyboxcfg 进入busybox的menuconfig界面,配置保存之后自动保存到默认配置
rootfs 构建根文件系统
sample 构建externed_device_sample下的例程
modules_outtree 构建树外驱动,对应modules目录中的驱动
6. rootfs构建逻辑
rootfs是Linux功能定制化的主要体现,不同的rootfs为不同的用户提供定制化功能,例如Android、Ubuntu、CentOS等。嵌入式Linux也主要通过rootfs来定制化需求。下面将介绍rootfs的构建的基本逻辑,以帮助用户修改文件系统实现自定义的文件系统。
SDK中的rootfs构建逻辑只有一条:按标号顺序执行rootfs目录中有标号的脚本,构建时会为每个脚本传递顶层目录和输出目录的绝对路径
6.1 添加和删除文件
因此如果想添加文件到rootfs可以创建一个新文件,例如:010_userfile.sh,
#!/bin/bash
# 顶层目录
TOP_DIR=$1# rootfs输出目录
INSTALL_DIR=$2
# 将用户文件拷贝到根文件系统的/root目录下cp <userfile_path> $INSTALL_DIR/root/
如果想删除功能或文件,可以找到拷贝该文件的脚本注释掉起作用的命令,也可以在最后一个脚本中删除文件。
例如默认构建会将externed_device_sample下的例程构建到根文件系统中,如果不想在最终的文件系统中包含这些例程可以在005_sample.sh脚本中删除拷贝sample的行,也可以创建新的脚本删除这个文件。
【注】:所有的其它构建过程都不会拷贝文件到根文件系统中,如果添加了新的驱动、工具或者库,则需要修改脚本将文件拷贝到文件系统
6.2 Ubuntu系统的构建
目前001_base.sh是一个软链接文件,可以连接到ubuntu.sh或者busybox.sh。这两个脚本用于构建ubuntu和Linux系统有差异的部分。在rootfs中执行以下命令切换软链接的指向以切换文件系统的类型。
# 链接到ubuntu,随后回到顶层目录执行make rootfs_clean && make rootfs即可构建出ubuntu系统
# 切换系统后需要清除原来的系统重新构建
ln -sf ubuntu.sh 001_base.sh
# 链接到busybox构建
ln -sf busybox.sh 001_base.sh
6.3 如何加速rootfs的构建
rootfs每次构建时会先编译相关的依赖,但是大多数组件编译之后并不会修改。这导致每次构建rootfs仍然需要大量的时间检查依赖项是否编译完成。如果确定这些组件已经被构建且未修改或清除,可以直接删除rootfs的相关依赖可以大大降低rootfs的编译时间。
下面是原始makefile
rootfs: busybox sample env_tools tools
make -C tools
@mkdir -p $(ROOTFS_BUILD_DIR)
@echo “[rootfs install]”
@./rootfs/install.sh $(CURDIR) $(ROOTFS_BUILD_DIR)
@echo “[generate ext4]”
@./rootfs/gen_ext4.sh $(ROOTFS_BUILD_DIR) $(OUTPUT_DIR)/rootfs.ext4
下面是修改后makefile
rootfs: # busybox sample env_tools tools
# make -C tools
@mkdir -p $(ROOTFS_BUILD_DIR)
@echo "[rootfs install]"
@./rootfs/install.sh $(CURDIR) $(ROOTFS_BUILD_DIR)
@echo "[generate ext4]"
@./rootfs/gen_ext4.sh $(ROOTFS_BUILD_DIR) $(OUTPUT_DIR)/rootfs.ext4
【开发者说】:在经过一次完整编译后,我会关闭rootfs所有的依赖项,以加速rootfs的构建。当某些组件(例如busybox)出现修改,会先手动编译busybox,再编译rootfs。
7. 内核与驱动
7.1 Linux树内驱动
修改Linux树内驱动时只需要在顶层目录执行make kernelcfg即可,再通过menuconfig菜单修改对应的配置选项即可。配置之后自动保存到默认的配置文件。
7.2 Linux树外驱动
以SDK目录结构为例,Linux的树外驱动放在modules目录下。如果要添加新的驱动也可以放在该目录下。SDK为用户提供了默认的树外驱动编译的Makefile。下面以默认的i2c_soft驱动做简要分析。
${TOP_DIR}/modules/i2c_soft/Makefile
# 需要编译的驱动模块
obj-m += i2c_soft.o
# 包含默认的驱动编译的makefileinclude $(MODULES_COMMON)
7.3 设备树
欧拉派使用的设备树路径为:${SDK_TOP}/linux-4.19.90/arch/arm64/boot/dts/vendor/ss928v100-demb-emmc.dts
相关的设备树文件有:ss928v100-demb.dts和ss928v100.dtsi
ss928v100.dtsi为芯片级设备树,内容主要是和芯片功能相关的配置
ss928v100-demb.dts为板级设备树,包含ss928v100.dtsi,描述额外的和开发板相关的设备。一般情况下也仅修改此设备树。
ss928v100-demb-emmc.dts仅用于驱动不同的启动介质带来的差异,一般不做修改
8. u-boot
参考《u-boot修改操作指南》
- 分享
- 举报
-
h 2024-05-27 17:21:09回复 举报就是请问这个是内置系统的吗,还是需要用sd卡下载一个系统
-
浏览量:1116次2024-03-11 15:42:33
-
2024-01-04 15:43:20
-
浏览量:1445次2024-03-29 10:57:19
-
浏览量:1044次2024-04-04 22:59:26
-
浏览量:858次2024-02-28 10:42:48
-
浏览量:3860次2021-09-23 13:43:22
-
浏览量:2054次2024-01-07 22:19:19
-
浏览量:5974次2021-09-26 13:36:07
-
浏览量:686次2024-07-31 19:46:13
-
浏览量:1201次2024-03-14 17:20:56
-
浏览量:970次2024-07-12 08:58:25
-
2024-03-29 15:14:19
-
浏览量:1377次2024-03-29 11:08:20
-
2023-12-18 10:42:29
-
浏览量:4042次2021-09-17 13:40:56
-
浏览量:976次2024-01-10 17:34:04
-
浏览量:5747次2022-10-24 15:47:55
-
2024-09-29 10:37:46
-
浏览量:4623次2021-09-15 13:48:53
- Meetup会议:易百纳携手南邮共建AI视觉及机器人联合实验室,分享欧拉派实战应用
- Memcached 1.5.12 移植指南(openEuler 20.03 LTS SP1)
- openEuler操作系统安装在服务器的方法介绍(二):安装方法
- Varnish 6.2.0 移植指南(openEuler 20.03 LTS SP1)
- openEuler GNOME 桌面环境的安装和使用
- 【易百纳新品】欧拉派——基于海思主控SD3403、华为星闪技术的面向工业控制/机器视觉的生态开发板,兼容树莓派,预售799!
- 基于易百纳SS928或者欧拉派移植ubuntu20.04和ROS环境
- 易百纳受邀参加2024年南京邮电大学创新创业冬令营启动仪式,并公布为深化产教融合,开设了首届机器视觉实战就业班!
- Lighttpd 1.4.53 移植指南(openEuler 20.03 LTS SP1)
- 易百纳与成都鼎桥达成战略合作,共创海鸥派生态新篇章
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
四叶草~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明