Yocto中增加一个自己的应用

背景:

        最近做车载项目仪表的开发,仪表应用都开发个差不多了。但是仪表运行的linux系统却是不尽人意。之前做的项目都是基于buildroot构建的linux。已经习惯了这种方法。但是现在改用yocto,不得不硬着头皮研究下去。

一、芯驰yocto目录架构:

yocto
├── base                                           # 关于芯驰配置yocto的基本配置
├── build-x9hp_ms_a12_vemmc_ap2                    # 该目录是构建过程的工作区,包含生成的临时文件、镜像以及构建日志。具体用到再讲
├── downloads -> /home/liuyier/share/downloads     # 存储从外部拉取的源代码包或镜像文件。这部分通常由 Yocto 自动管理,此处做软链接省去下载时间
├── meta-openembedded                              # Yocto 项目中一个非常重要的元层集合(meta-layer collection),包含许多通用的、与硬件无关的扩展功能和包。
├── meta-qt5                                       # qt5层
├── meta-selinux                                   # 是 Yocto 项目中的一个元层,提供了 SELinux(Security-Enhanced Linux) 的支持。SELinux 是 Linux 内核中内置的强制访问控制(MAC)系统,广泛用于增强系统的安全性。通过 meta-selinux 层,你可以在 Yocto 项目中启用 SELinux,并为目标系统构建和配置所需的工具、库、以及策略文件。    
├── meta-semidrive                                 # 芯驰相关的元素集合层,我们要修改的东西大部分都在这里
├── poky                                           # poky 是 Yocto 的参考发行版(reference distribution),它不仅提供了 Yocto 的核心工具和配置,还包含了示例和支持文件,帮助开发者快速开始使用 Yocto 构建嵌入式 Linux 系统。                               
├── prebuilt                                       # rebuilt 目录通常用于存放预构建的二进制文件或库,这些文件是直接使用的,而不是通过 BitBake 配方从源代码编译生成的
├── README -> base/README                          # README
├── sd_setup.sh -> base/sd_setup.sh                # 芯驰提供的构建yocto编译的脚本
├── setup-environment -> base/setup-environment    # 芯驰提供的设置yocto编译的脚本
└── source                                         # 源码存放目录

在本节中,主要讲解如何添加一个自己的应用,主要操作的目录是meta-semidrive。其它目录以后慢慢展开讲。

二、准备自己的可执行程序(此处指的是不带源码的程序/动态库)

2.1)仪表程序的目录结构:

/ClusterBin
├── bin
├── data
├── fonts
├── libs
├── plugins
└── tools

 2.2)该目录结构在meta-semidrive下的结构

meta-semidrive/recipes-core/cluster
├── cluster
│   ├── ClusterBin
│   │   ├── bin
│   │   ├── data
│   │   ├── fonts
│   │   ├── libs
│   │   ├── plugins
│   │   └── tools
│   ├── cluster.sh
│   └── COPYING
└── cluster.bb

2.3) bb文件编写内容

SUMMARY = "cluster"
DESCRIPTION = "zs instrument architecturethe ,script for starting cluster"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=ff5ef7e3028ec187f108ce21a109eff3"
SRC_URI = "file://COPYING    \
           file://ClusterBin \
           file://cluster.sh \
"

inherit update-rc.d

S = "${WORKDIR}"

INITSCRIPT_PACKAGES = "${PN}"
INITSCRIPT_NAME = "cluster.sh"
INITSCRIPT_PARAMS_${PN} = "defaults 04"
INSANE_SKIP_${PN} += "already-stripped installed-vs-shippedi ldflags file-rdeps"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
DEPENDS = "pvr-lib messagecenter"


do_install () {

        install -d ${D}${sysconfdir}/init.d
        install -d ${D}/ClusterBin
        install -d ${D}/ClusterBin/bin
        install -d ${D}/ClusterBin/libs
        install -d ${D}/ClusterBin/data
        install -d ${D}/ClusterBin/fonts
        install -d ${D}/ClusterBin/plugins
        install -d ${D}/ClusterBin/tools

        echo " install -m 0755 cluster.sh .............." 
        install -m 0755 cluster.sh ${D}${sysconfdir}/init.d
        cp -raf ${S}/ClusterBin/* ${D}/ClusterBin/


}

FILES_${PN} += "  \
        cluster.sh \
        ClusterBin \
        /ClusterBin/fonts/* \
        /ClusterBin/data/* \
        /ClusterBin/tools/*  \
        /ClusterBin/plugins/* \
        /ClusterBin/libs/* \
        /ClusterBin/data/Sound_Alarm/* \
"

2.4)conf文件的编写

IMAGE_INSTALL_append = " \
        rpmsg-echo-test \
        can-test \
        libdrm-tests \
        stressapptest \
        csi-test \
        bench-es2 \
        messagecenter \
        cluster \         #主要添加这个
        libgpiod \
        lib-slots-update \
        qtbase qtserialport qtdeclarative qtquickcontrols qtquickcontrols2 qtgraphicaleffects \
        audio-ref alsa-lib alsa-utils alsa-state alsa-plugins \
        sdshell \
        sdlog-tools \
        am-plugin \
        cluster-demo \
        recovery-service \
        libhwconverter \
        libuser-config \
        key-revocation \
        sdrv-prop-tools sdrv-propd \
        camshare \
        avm-cast \
        "

三、编译、烧录

make ap2_linux510

 四、遇到的问题:

问题一:
ERROR: QA Issue: cluster: Files/directories were installed but not shipped in any package:
  /fonts
  /data
  /tools
  /plugins
  /libs
  /data/Sound_Alarm
  /data/Sound_Alarm/buzzerlong.wav
  /data/Sound_Alarm/buzzer.wav
  /data/Sound_Alarm/ticktack.wav
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
cluster: 9 installed and not shipped files. [installed-vs-shipped]
DEBUG: Python function populate_packages finished

解决方法:


FILES_${PN} += "  \
        cluster.sh \
        ClusterBin \
        /ClusterBin/fonts/* \
        /ClusterBin/data/* \
        /ClusterBin/tools/*  \
        /ClusterBin/plugins/* \
        /ClusterBin/libs/* \
        /ClusterBin/data/Sound_Alarm/* \
"
问题二:
 clear old dir file .......................
 install -m 0755 cluster.sh ..............
install: cannot stat 'cluster.sh': No such file or directory #具体看这句
WARNING: exit code 1 from a shell command.

解决方法和上面一样

问题三:
install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/bin'
| install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/data'
| install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/fonts'
| install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/libs'
| install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/plugins'
| install: omitting directory '/home/liuyier/semidriver_x9/hs/ptg4.6_dev/ptg4.6/yocto/build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/cluster/1.0-r0/ClusterBin/tools'


install -m 不可以安装目录,
在 Yocto 的安装阶段,install -m 命令用于设置文件的权限并将其安装到目标目录。但是,install -m 通常用于文件,而不是用于整个目录。若要安装目录,应该使用 install -d 来创建目录,而不是试图直接用 -m 安装整个目录。

### 解决Yocto系统中安装中文字体后出现中文乱码的问题 #### 安装合适的中文字体 为了确保Yocto系统能够正确显示中文字符,首先需要确认已安装适合的中文字体。可以从常见的开源字体库下载并集成到目标镜像中,比如WenQuanYi Micro Hei或Noto Sans CJK等[^1]。 ```bash # 下载字体文件至本地目录 wget https://example.com/path/to/WQY-MicroHei.ttc -O /path/on/host/WQY-MicroHei.ttc ``` #### 修改根文件系统的字体配置 为了让新加入的字体生效,在完成字体部署之后还需要调整系统的字体设置。这涉及到更新`/etc/fonts/local.conf`或其他相关联的XML格式字体配置文档,使得应用程序可以识别新增加的字型资源[^2]。 ```xml <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- 添加自定义字体路径 --> <dir>/usr/share/fonts/truetype/wqy</dir> <!-- 设置默认比例和抗锯齿选项 --> <match target="pattern"> <test name="family"><string>serif</string></test> <edit mode="assign" name="family"><string>WenQuanYi Micro Hei</string></edit> </match> ... </fontconfig> ``` #### 更新缓存与重启服务 更改完成后应当刷新字体缓存以便立即应用新的设定,并且可能要重新启动图形界面会话或是整个设备让改动完全起效[^3]。 ```bash fc-cache -fv reboot ``` 通过上述操作应该能有效处理由于缺少适当字体而导致的文字渲染异常状况;如果仍然存在视觉上的不一致,则建议进一步检查环境变量$LANG$$及$LC_ALL是否被适当地设定了对应的locale值[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值