Hieuler SDK操作指南(Linux)
1、概述
由于Ebaina对欧拉派适配后的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.1SDK顶层目录
.
├── 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)
目录结构
.
├── 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
# 包含默认的驱动编译的makefile
include $(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:22:01回复 举报就是请问这个是内置系统的吗,还是需要用sd卡下载一个系统
-
浏览量:1498次2024-03-29 11:19:21
-
浏览量:1377次2024-03-29 11:08:20
-
浏览量:686次2024-07-31 19:46:13
-
浏览量:1116次2024-03-11 15:42:33
-
浏览量:2635次2020-07-07 09:24:18
-
浏览量:10543次2020-11-13 14:17:48
-
浏览量:609次2023-07-26 09:40:01
-
浏览量:527次2023-08-25 10:27:43
-
浏览量:9472次2018-06-02 19:08:30
-
浏览量:5859次2022-09-21 14:30:18
-
浏览量:3293次2018-04-12 11:32:51
-
浏览量:1222次2023-07-13 14:05:43
-
浏览量:3661次2017-11-16 11:30:55
-
浏览量:2382次2023-11-09 16:39:11
-
浏览量:5767次2018-04-03 09:53:34
-
浏览量:1516次2024-01-19 17:42:50
-
2023-08-22 16:45:59
-
浏览量:10232次2019-02-16 11:31:35
-
浏览量:6442次2018-06-14 22:53:53
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
四叶草~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明