【ZYNQ】petalinux实现开机自启动

一、实现开机启动

本章节内容参考UG1144。
(1)创建myapp-init应用

cd <plnx-proj-proot>
petalinux-create -t apps --template install -n myapp-init --enable

(2)修改myapp-init.bb配置文件
配置文件的位置在:

project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb

修改文件内容为:

#
# This file is the myapp-init recipe.
#
SUMMARY = "Simple myapp-init application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM ="file://${COMMON_LICENSE_DIR}/
MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://myapp-init \
 "
S = "${WORKDIR}"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
inherit update-rc.d
INITSCRIPT_NAME = "myapp-init"
INITSCRIPT_PARAMS = "start 99 S ."
do_install() {
 install -d ${D}${sysconfdir}/init.d
 install -m 0755 ${S}/myapp-init ${D}${sysconfdir}/init.d/myapp-init
}
FILES_${PN} += "${sysconfdir}/*"

(3)修改myapp-init脚本文件内容
脚本文件的位置在:

project-spec/meta-user/recipes-apps/
myapp-init/files/myapp-init

本文修改的内容为加载xilinx-axidma.ko module和在后台启动程序07和08,shell脚本比较简陋,更专业的写法可参考文末链接【1】:

#!/bin/sh

cd /lib/modules/5.4.0-xilinx-v2020.1/extra
insmod xilinx-axidma.ko

cd /usr/bin
./08 &
./07 &

完成后进行petalinux-build,使用新生成的镜像,下次就可以开机自启动了。

二、网络模块未加载问题

在本文中,由于程序07和08之间通过socket数据报方式进行通信,而开机自启动时发现07和08运行时,socket相关的模块没有加载,造成socket通信功能失效,并且不会报错,在linux的启动记录中没有相关的错误
比较dirty的方法是在07和08程序中加上sleep(5),等网络模块加载完成后,再执行功能。
下面介绍其他的方法:
根据文末参考链接【2】,开机启动的程序由/etc/inittab控制:

init进程是接下来第一个被启动运行的(非内核进程),因此它的进程编号PID的值总是1。
2.1 首先,init进程读取配置文件/etc/inittab,决定需要启动的运行级别(Runlevel),每个级别分别由0到6的整数表示。
2.2 然后执行/etc/rc.d/rc.sysinit。它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等
准备好以上一切之后,系统开始进入用户层的初始化阶段。

查看petalinux生成的rootfs中的/etc/inittab文件:

# The default runlevel.
id:5:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

可以发现默认的运行等级为5,而在执行/etc/rc5.d文件夹中的脚本之前,先执行了/etc/rcS.d文件夹中的脚本。查看/etc/rc5.d文件夹中的内容,确实包含networking的启动脚本S01:
在这里插入图片描述
检查myapp-init.bb配置文件,发现有这句话:

INITSCRIPT_PARAMS = "start 99 S ."

根据参考链接【3】,这句话的意思是:系统进入启动等级S时,启动该服务,该服务的启动等级为99。
将其修改为启动等级5,再次build,myapp-init启动脚本被放置于/etc/rc5.d文件夹中,且等级为最低的99,即最后启动:

INITSCRIPT_PARAMS = "start 99 5 ."

至此,虽然linux和petalinux还未深入掌握,但socket功能失效的问题得到解决。

三、参考链接

【1】https://blog.csdn.net/qq_35119182/article/details/86933721
【2】https://blog.csdn.net/soonfly/article/details/72876001
【3】https://www.jianshu.com/p/5c3292b9cec7

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值