Hieuler SDK操作指南(Linux)

Hieuler SDK操作指南(Linux) 四叶草~ 2024-03-29 10:57:19 140

1、概述

由于Ebaina对欧拉派适配后的SDK与官方SDK有较大差异,因此提供《Hieuler SDK操作指南(Linux)》文档,为开发者进行开发提供基本的指导。

SDK压缩包文件:03 开发板软件资料/03 易百纳适配SDK/Hieuler_SDK_Linux.tar.gz

2、描述约定

为了方便描述,做以下描述约定。

  1. 后续描述SDK解压后的顶层目录时以${SDK_TOP}替代
  2. busybox为基础的嵌入式Linux系统称为Linux系统。构建出的ubuntu系统称为ubuntu系统,由于开发环境也是ubuntu系统,具体指PC端还是构建出的板端ubuntu系统视具体语境判断。
  3. 将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.dtsss928v100.dtsi

ss928v100.dtsi为芯片级设备树,内容主要是和芯片功能相关的配置

ss928v100-demb.dts为板级设备树,包含ss928v100.dtsi,描述额外的和开发板相关的设备。一般情况下也仅修改此设备树

ss928v100-demb-emmc.dts仅用于驱动不同的启动介质带来的差异,一般不做修改

8、u-boot

参考《u-boot修改操作指南》

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
四叶草~
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区