前言
Petalinux 终归是属于Linux的其中一个发行版,也就是说它可以像绝大多数发行版本一样,向/etc/init.d
目录添加自己的脚本,然后更改部分系统文件来实现。如果你的想法是这样,可以参考文章:Linux—添加开机启动(服务/脚本)
本文所介绍的方法,主要是用于在编译Petalinux镜像的时候,就将其添加进去。好处就是 Build Once ,Use All
一、操作步骤
- 初始化 PetaLinux 运行环境:
source <PetaLinux-安装目录>/settings.sh
- 创建自动执行脚本相关文件:
cd <工程根目录>
petalinux-create -t apps --template install -n <自定义脚本名字> --enable
- 修改 Bitbake 脚本文件:
<工程根目录>/project-spec/meta-user/recipes-apps/<自定义脚本名字>/<自定义脚本名字>.bb
#
# This file is the <自定义脚本名字> recipe.
#
SUMMARY = "Simple <自定义脚本名字> application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://<自定义脚本名字> \
"
S = "${WORKDIR}"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
inherit update-rc.d
INITSCRIPT_NAME = "<自定义脚本名字>"
INITSCRIPT_PARAMS = "start 99 S ."
do_install() {
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${S}/<自定义脚本名字> ${D}${sysconfdir}/init.d/<自定义脚本名字>
}
FILES_${PN} += "${sysconfdir}/*"
- 修改修改目标脚本文件
<工程根目录>/project-spec/meta-user/recipes-apps/<自定义脚本名字>/files/<自定义脚本名字>
,比如
#!/bin/sh
echo "Hello World!"
- 重新编译
petalinux-build
二、细节讲解
1.Petalinux 命令
petalinux-create -t apps --template install -n <自定义脚本名字> --enable
-t:创建的类型,自启动脚本文件在这其中是以app形式添加进去(表述不准确,有想深入了解请看UG1144)
--template:样板工程
2.Bitbake食谱
协议声明和工程文件地址,不重要
#
# This file is the <自定义脚本名字> recipe.
#
SUMMARY = "Simple <自定义脚本名字> application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://<自定义脚本名字> \
"
重点
# 源目录
S = "${WORKDIR}"
# 脚本目录
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
# Bitbake类文件包含了一些bitbake任务的定义,例如怎么配置、怎么安装。
# 配方(recipes)文件继承类文件,就继承了这些任务的定义。
# 我们现在需要增加一个使用update-rc.d来配置自启程序,只要在配方(recipes)文件中继承。使用方法如下。
inherit update-rc.d
# 至于为什么是update-rc.d,可以在网上查到,该命令就是用于配置linux中自启动程序,
# 所以下面两项的意思就很简单了,就是update-rc.d的两个参数。
# 至于启动项“99”后面又跟的S,其实是指Linux里面的运行级别。1|2|3|4|5|6|0|S
INITSCRIPT_NAME = "<自定义脚本名字>"
INITSCRIPT_PARAMS = "start 99 S ."
# 1为单用户模式
# 2-4是文本模式,一般不用图形界面的话用3就行了,3是多用户字符界面模式
# 5是多用户图形模式
# 0关机
# 6重启
# S就是全都有
安装目录
do_install() {
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${S}/<自定义脚本名字> ${D}${sysconfdir}/init.d/<自定义脚本名字>
}
FILES_${PN} += "${sysconfdir}/*"