添加社區(qū)軟件包proftpd
通常我們的應(yīng)用還需要實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng),這些也可以在配方中實(shí)現(xiàn)。下面以一個(gè)稍微復(fù)雜一點(diǎn)的FTP服務(wù)應(yīng)用為例說(shuō)明如何使用Yocto構(gòu)建包含特定應(yīng)用的生產(chǎn)鏡像,這里的FTP服務(wù)程序采用的是開(kāi)源的Proftpd,各個(gè)版本源碼位于ftp://ftp.proftpd.org/distrib/source/。
本節(jié)重點(diǎn)描述如何移植FTP服務(wù)到目標(biāo)機(jī)器中的方法。通過(guò)搜索當(dāng)前源代碼倉(cāng)庫(kù)發(fā)現(xiàn)Yocto項(xiàng)目中已經(jīng)存在proftpd的配方,只是沒(méi)有添加的系統(tǒng)鏡像中。下面詳細(xì)描述具體的移植過(guò)程。
01
查找Yocto的proftpd配方
bitbake -s | grep proftpd注:這里可以看到Y(jié)octo項(xiàng)目中已經(jīng)存在proftpd配方,版本為1.3.6-r0。

02
單獨(dú)編譯proftpd
PC:~/renesas/yocto/build-remi-1g$ bitbake proftpd
03
打包proftpd到文件系統(tǒng)
在conf/local.conf中增加一行語(yǔ)句:
IMAGE_INSTALL_append = " proftpd"
04
重新構(gòu)建鏡像
PC:~/renesas/yocto/build-remi-1g$ bitbake myir-image-full
05
燒錄新鏡像
系統(tǒng)構(gòu)建完成之后,需重新燒錄鏡像并查看proftpd服務(wù)是否運(yùn)行:
root@myir-remi-1g:~root 501 0.0 0.0 2780 624 ttySC0 S+ 00:39 0:00 grep proftpd
06
ftp賬戶(hù)權(quán)限配置
這里補(bǔ)充說(shuō)明一下FTP的賬戶(hù)設(shè)置。FTP客戶(hù)端有三種類(lèi)型登錄賬戶(hù),分別為匿名賬戶(hù),普通賬戶(hù)和root賬戶(hù)。
匿名賬戶(hù)
用戶(hù)名默認(rèn)為ftp,不需要設(shè)置密碼,用戶(hù)登錄后可以查看系統(tǒng)/var/lib/ftp目錄下的內(nèi)容,默認(rèn)沒(méi)有寫(xiě)權(quán)限。
由于系統(tǒng)默認(rèn)不存在/var/lib/ftp目錄,所以需要用戶(hù)在目標(biāo)機(jī)器上創(chuàng)建一個(gè)目錄/var/lib/ftp。
為了盡量不修改meta-openembbed,我們可以通過(guò)為proftpd recipes添加Append文件“proftpd_1%.bbappend”來(lái)實(shí)現(xiàn)/var/lib/ftp目錄的創(chuàng)建。
首先需要在meta-myir-remi/recipes-common/recipes-devtools/目錄下新建一個(gè)proftpd文件夾,之后進(jìn)入文件夾,新建一個(gè)proftpd_1%.bbappend文件。加入下面這段task安裝任務(wù),保存退出至構(gòu)建目錄。然后重復(fù)之前章節(jié)添加應(yīng)用的步驟,重新構(gòu)建鏡像文件進(jìn)行測(cè)試。
do_install_append() {install -m 755 -d ${D}/var/lib/${FTPUSER}chown ftp:ftp ${D}/var/lib/${FTPUSER}}

普通賬戶(hù)
在目標(biāo)機(jī)器上使用useradd和passwd命令可以創(chuàng)建普通用戶(hù),并設(shè)置用戶(hù)密碼之后,客戶(hù)端也可以使用該普通賬戶(hù)登錄到該用戶(hù)的HOME目錄。
如果需要在編譯鏡像時(shí)包含普通用戶(hù),可以參照以下鏈接添加普通用戶(hù),然后重新構(gòu)建鏡像文件,具體方法這里不再描述。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#ref-classes-useradd

root賬戶(hù)
如果需要開(kāi)放root賬戶(hù)登錄FTP服務(wù)器,需要先修改 /etc/proftpd.conf文件,在文件中增加一行配置 "RootLogin on"。與此同時(shí),也需要為root賬戶(hù)設(shè)置密碼,重啟proftpd服務(wù)之后,客戶(hù)端也可以使用root賬戶(hù)登錄到目標(biāo)機(jī)器上。
root@myir-remi-1g:/注意:修改/etc/proftpd.conf使能root賬戶(hù)登錄僅用于測(cè)試目的,關(guān)于/etc/proftpd.conf的更多配置,參見(jiàn)下方鏈接。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
http://www.proftpd.org/docs/example-conf.html

07
實(shí)現(xiàn)proftpd自啟動(dòng)
本節(jié)將以proftpd為例從recipe源碼的層面介紹如何添加應(yīng)用程序recipe并實(shí)現(xiàn)程序的開(kāi)機(jī)自啟動(dòng)。
proftpd位于源代碼倉(cāng)庫(kù)layers/meta-openembedded/meta-networking/recipesdaemons/proftpd,目錄結(jié)構(gòu)如下。

ubuntu@ubuntu2004:~/renesas/yocto/myir-renesas-yocto$:~/renesas/yocto/layers/meta-openembedded/meta-networking/recipes-daemons/proftpd$.├── files│ ├── basic.conf.patch│ ├── build_fixup.patch│ ├── close-RequireValidShell-check.patch│ ├── contrib.patch│ ├── default│ ├── proftpd-basic.init│ └── proftpd.service└── proftpd_1.3.6.bb1 directory, 8 files
?proftpd_1.3.6.bb為構(gòu)建proftpd服務(wù)的配方
?proftpd.service為開(kāi)機(jī)自啟動(dòng)服務(wù)
?proftpd-basic.init為proftpd的啟動(dòng)腳本
proftpd_1.3.6.bb中指定了獲取proftpd服務(wù)程序的源代碼路徑以及針對(duì)該版本源碼的一些補(bǔ)丁文件,如下:
SRC_URI = "ftp://ftp.proftpd.org/distrib/source/${BPN}-${PV}.tar.gz \file://basic.conf.patch \file://proftpd-basic.init \file://default \file://close-RequireValidShell-check.patch \file://contrib.patch \file://build_fixup.patch \file://proftpd.service \
recipes配方中還指定了proftpd的Task配置任務(wù)(do_configure)和安裝過(guò)程(do_install):
do_configure () {install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}oe_runconfcp ${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool ${S}/libtool}FTPUSER = "ftp"FTPGROUP = "ftp"do_install () {oe_runmake DESTDIR=${D} installrmdir ${D}${libdir}/proftpd ${D}${datadir}/locale[ -d ${D}${libexecdir} ] && rmdir ${D}${libexecdir}sed -i '/ *User[ \t]*/s/ftp/${FTPUSER}/' ${D}${sysconfdir}/proftpd.confsed -i '/ *Group[ \t]*/s/ftp/${FTPGROUP}/' ${D}${sysconfdir}/proftpd.confinstall -d ${D}${sysconfdir}/init.dinstall -m 0755 ${WORKDIR}/proftpd-basic.init ${D}${sysconfdir}/init.d/proftpdsed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/proftpdsed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/proftpdsed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/proftpdsed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!'${D}${sysconfdir}/init.d/proftpdinstall -d ${D}${sysconfdir}/defaultinstall -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/proftpd……}
這兩個(gè)函數(shù)對(duì)應(yīng)BitBake構(gòu)建過(guò)程的config和install任務(wù)。
關(guān)于任務(wù)的更多信息,參見(jiàn)下方鏈接。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
https://www.yoctoproject.org/docs/3.1.1/mega-manual/mega-manual.html#ref-tasks

當(dāng)前目標(biāo)機(jī)器采用systemd作為初始化管理子系統(tǒng)systemd是一個(gè)Linux系統(tǒng)基礎(chǔ)組件的集合,提供了一個(gè)系統(tǒng)和服務(wù)管理器,運(yùn)行為PID 1并負(fù)責(zé)啟動(dòng)其它程序。Yocto項(xiàng)目下使用systemd的配置參見(jiàn)下方鏈接。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#selecting-an-initialization-managerproftpd_1.3.6.bb

通過(guò)繼承systemd.class(具體內(nèi)容可以查看poky/meta/classes/systemd.bbclass)默認(rèn)使能了 SYSTEMD_AUTO_ENABLE變量并實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng),用戶(hù)自己編寫(xiě)的recipes也可以通過(guò)設(shè)置變量SYSTEMD_AUTO_ENABLE實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng),示例如下:
SYSTEMD_AUTO_ENABLE_${PN} = "enable"其中Proftpd服務(wù)的開(kāi)機(jī)自啟動(dòng)服務(wù)文件proftpd.service內(nèi)容如下:
ubuntu@ubuntu2004:~/renesas/yocto/layers/meta-openembedded/meta-networking/recipes-daemons/proftpd/files$ cat proftpd.service[Unit]Description=proftpd DaemonAfter=network.target[Service]Type=forkingExecStart=@SBINDIR@/proftpd -c @SYSCONFDIR@/proftpd.confStandardError=syslog[Install]WantedBy=default.target
?After:表示此服務(wù)在network啟動(dòng)后再啟動(dòng)。
?Type:表示啟動(dòng)的方式為forking。
?ExecStart:表示需要啟動(dòng)的程序,及對(duì)應(yīng)的參數(shù)。
如需了解更多關(guān)于systemd的信息請(qǐng)查看此網(wǎng)站。
https://wiki.archlinux.org/index.php/systemd

如您在使用瑞薩MCU/MPU產(chǎn)品中有任何問(wèn)題,可識(shí)別下方二維碼或復(fù)制網(wǎng)址到瀏覽器中打開(kāi),進(jìn)入瑞薩技術(shù)論壇尋找答案或獲取在線技術(shù)支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待續(xù)
推薦閱讀
Yocto系統(tǒng)添加程序——RZ MPU工業(yè)控制教程連載(62)
bitbake使用——RZ MPU工業(yè)控制教程連載(61)
使用工具鏈開(kāi)發(fā)應(yīng)用——RZ MPU工業(yè)控制教程連載(60)



需要產(chǎn)品及方案支持
請(qǐng)掃碼登記