环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類(lèi)

當(dāng)前位置: 首頁(yè) > 工業(yè)電氣產(chǎn)品 > 工業(yè)開(kāi)關(guān) > 風(fēng)壓開(kāi)關(guān)

類(lèi)型分類(lèi):
科普知識(shí)
數(shù)據(jù)分類(lèi):
風(fēng)壓開(kāi)關(guān)

如何定制嵌入式Linux發(fā)布版

發(fā)布日期:2022-04-26 點(diǎn)擊率:122

  • 關(guān)鍵詞:                                                                Linux                                                                Embedded                                                                ARM

  • 摘要:針對(duì)嵌入式系統(tǒng)預(yù)編譯Linux鏡像和發(fā)行版在創(chuàng)客運(yùn)動(dòng)中已經(jīng)很普遍,這些發(fā)行版本已經(jīng)包含組件(有時(shí)候可能超過(guò)必需的),因此學(xué)生和業(yè)余愛(ài)好者們可以很容易的開(kāi)始開(kāi)發(fā)。Ubuntu, Debian和Arch都屬于這樣的發(fā)行版。


1). 簡(jiǎn)介

針對(duì)嵌入式系統(tǒng)預(yù)編譯Linux鏡像和發(fā)行版在創(chuàng)客運(yùn)動(dòng)中已經(jīng)很普遍,這些發(fā)行版本已經(jīng)包含組件(有時(shí)候可能超過(guò)必需的),因此學(xué)生和業(yè)余愛(ài)好者們可以很容易的開(kāi)始開(kāi)發(fā)。Ubuntu, Debian和Arch都屬于這樣的發(fā)行版。


可是,當(dāng)我們需要在計(jì)算機(jī)模塊或者工業(yè)產(chǎn)品上面運(yùn)行定制化或者特殊應(yīng)用的Linux鏡像時(shí)候,一個(gè)預(yù)編譯的嵌入式Linux發(fā)行版本并不一定是最好的選擇。編譯一個(gè)鏡像有一整套流程,在這個(gè)過(guò)程中,可以去掉任何不想要的但會(huì)導(dǎo)致開(kāi)機(jī)時(shí)間增加,影響處理速度以及浪費(fèi)內(nèi)存空間的項(xiàng)目。很多時(shí)候我們因?yàn)橄到y(tǒng)里面有很多無(wú)用的應(yīng)用和服務(wù)在運(yùn)行導(dǎo)致系統(tǒng)資源浪費(fèi)。舉例說(shuō)明,在headless應(yīng)用中,桌面環(huán)境是不需要的,因此我們應(yīng)該編譯一個(gè)基于控制臺(tái)的版本,也就是一個(gè)更快更輕量級(jí)的Linux版本。另一個(gè)使用預(yù)編譯版本的弊端是授權(quán)問(wèn)題,如Canonical (提供Ubuntu發(fā)行版本的公司) 就不允許在沒(méi)有適當(dāng)合作認(rèn)證前提下隨意定制和銷(xiāo)售Ubuntu。與之相反,基于一個(gè)定制的Linux版本,我們可以完全控制所需安裝的包以及使用的授權(quán)。因此,我們就可以根據(jù)項(xiàng)目軟硬件需求擁有一個(gè)更優(yōu)化的Linux鏡像。


但是,如果我們想要將自己開(kāi)發(fā)的Qt應(yīng)用或者C應(yīng)用集成到定制Linux版本中,我們?cè)撛趺醋瞿兀渴遣皇切枰染幾g應(yīng)用然后復(fù)制到板子上面?還是需要先創(chuàng)建如”.ipk”或者”.deb”文件,然后復(fù)制到系統(tǒng)中去?如何將應(yīng)用包含到”local.conf”文件的” IMAGE_INSTALL_append”中去?如何像其他嵌入式設(shè)備那樣使應(yīng)用在系統(tǒng)啟動(dòng)后自動(dòng)運(yùn)行?


在本文中,我們將演示如何使用OpenEmbedded/Yocto編譯系統(tǒng)工具以自動(dòng)方式來(lái)實(shí)現(xiàn)上面問(wèn)題,我們將會(huì)快速展示基于bitbake來(lái)實(shí)現(xiàn)如編譯,包安裝,文件夾創(chuàng)建以及添加類(lèi)似系統(tǒng)啟動(dòng)后應(yīng)用自動(dòng)運(yùn)行服務(wù)的步驟。之后,我們將會(huì)為我們產(chǎn)品或者計(jì)算機(jī)模塊獲得一個(gè)定制化的嵌入式Linux發(fā)布版本。盡管不同開(kāi)發(fā)平臺(tái)或者單板之間的操作細(xì)節(jié)可能有些不同,但是原理都是一致的。


2). 準(zhǔn)備

為了跟隨下面步驟操作,首先需要配置一個(gè)用于編譯嵌入式Linux鏡像的環(huán)境,請(qǐng)參考Toradex 開(kāi)發(fā)者中心教程。Toradex使用OpenEmbedded-core編譯系統(tǒng)來(lái)編譯鏡像。基本上,這個(gè)教程包含:

a). 安裝準(zhǔn)備

b). Repo安裝

c). 下載Toradex BSP version2.5

d). 因?yàn)槲覀儜?yīng)用是基于Qt,因此需要在”stuff”目錄下添加 ”meta-qt5” layer,運(yùn)行下面命令來(lái)添加:

e). 基于上面所有,我們可以開(kāi)始編譯我們自己的嵌入式Linux版本了。


3). 使用QtCreator 創(chuàng)建應(yīng)用程序

為了演示需要,我們開(kāi)發(fā)了一個(gè)雙屏顯示應(yīng)用,實(shí)際上是兩個(gè)程序運(yùn)行在不同的顯示屏。這類(lèi)應(yīng)用很常見(jiàn),如機(jī)場(chǎng)值機(jī)柜臺(tái),或者在汽車(chē)中,一個(gè)是方向盤(pán)后面有儀表盤(pán)組,另一個(gè)是用于多媒體功能,GPS導(dǎo)航等的顯示面板。本文并未涉及Qt交叉編譯應(yīng)用的詳細(xì)配置,關(guān)于這個(gè)信息請(qǐng)參考Toradex開(kāi)發(fā)者中心這篇文章。


上述兩個(gè)應(yīng)用程序的源代碼可以從GitHub上面找到,請(qǐng)記住當(dāng)我們編譯鏡像的時(shí)候,這兩個(gè)應(yīng)用程序會(huì)按照我們稍后編寫(xiě)的recipe文檔指令自動(dòng)下載和編譯。

重要:當(dāng)鏡像編譯時(shí)候?yàn)榱舜_定應(yīng)用從哪里安裝,務(wù)必添加下述紅色部分代碼到“.pro” Qt 項(xiàng)目文件:


4). 同步應(yīng)用程序到GitHub

我們選擇使用GitHub是因?yàn)樗峁┌姹究刂乒ぞ撸瑫r(shí)由于它是云平臺(tái),這樣任何人都可以訪問(wèn)存儲(chǔ)在上面的項(xiàng)目和應(yīng)用。不過(guò),它也提供”private repository”選項(xiàng)。稍后,我們將會(huì)看到recipte通過(guò)GitHub下載應(yīng)用,并自動(dòng)安裝到我們定制的Linux鏡像中。為了達(dá)到這個(gè)目的,我們首先要將應(yīng)用程序所在的本地文件夾同步到GitHub倉(cāng)庫(kù)。我們需要為每個(gè)應(yīng)用創(chuàng)建一個(gè)對(duì)應(yīng)的倉(cāng)庫(kù)。


a). 從我們已經(jīng)創(chuàng)建的GitHub賬戶進(jìn)入,我們需要添加一個(gè)倉(cāng)庫(kù)。點(diǎn)擊右上角的 ,然后選擇"NewRepository",在新加載的頁(yè)面中,設(shè)定好"name", 添加 "description",最后點(diǎn)擊"Createrepository"。

b). 在接下來(lái)的頁(yè)面中,GitHub給出一些選項(xiàng)。為了方便,我們選擇如下:

上述命令在主機(jī)對(duì)應(yīng)Qt應(yīng)用文件夾中執(zhí)行:screen1和screen2。請(qǐng)記得編輯URL為你的GitHub 用戶名和倉(cāng)庫(kù)名。執(zhí)行push命令后,輸入GitHub用戶名和密碼,項(xiàng)目就會(huì)被上傳了。對(duì)另外一個(gè)應(yīng)用執(zhí)行同樣操作。進(jìn)入你的GitHub profile頁(yè)面,就可以看到新的倉(cāng)庫(kù)了。


5). 創(chuàng)建layerrecipes

什么是recipe?按照YoctoReference Manual,recipes是以”.bb”后綴結(jié)尾的文件,recipe主要包含有關(guān)給定軟件的信息,包括從哪里獲取源,應(yīng)用補(bǔ)丁,如何編譯源代碼以及如何在最后打包所有。


添加一個(gè)新recipe到編譯環(huán)境比較好的方式是將其放到一個(gè)新的layer里面,Layers通常是按照機(jī)器類(lèi)型,功能或相似條目組織的一組meta-data。我們用meta-toradex layer為例,Toradex通過(guò)這個(gè)layer給客戶提供Board Support Packages (BSP's),定制化 kernel, U-boot, 圖形特性等很多內(nèi)容。另一些大家熟知的layer 如meta-beagleboard, meta-fsl-arm和meta-intel-galileo。此外,我們也發(fā)現(xiàn)一些很有趣的layer比如meta-games, meta-maker以及無(wú)人機(jī)相關(guān)的meta-uav。大量的layer列表可以從這里找到。作為示例,我們這里創(chuàng)建一個(gè)新layer "meta-projects"。


a). 進(jìn)入"oe-core/stuff"文件夾,我們可以發(fā)現(xiàn)很多l(xiāng)ayers,包括上面提到的meta-toradex。在這里利用”mkdir”命令創(chuàng)建新名字為"meta-projects"的文件夾。

b). 進(jìn)入"meta-projects"文件夾,再次創(chuàng)建一個(gè)名字為"conf"的新文件夾。

c). 進(jìn)入"conf"文件夾,利用文本編輯工具如”vi”創(chuàng)建一個(gè)名字為"layer.conf"的新文件,并添加下面內(nèi)容,這是一個(gè)layer配置文件所需的最簡(jiǎn)格式,注意我們layer名字用紅色顯示。

d). Recipes在layer文件夾中按照應(yīng)用類(lèi)型,軟件分類(lèi)等組織,進(jìn)入到”meta-toradex” layer文件夾,可以發(fā)現(xiàn)所有關(guān)于Qt相關(guān)的recipes和應(yīng)用都在”recipes-qt”文件夾里面,而所有和內(nèi)核相關(guān)的都在”recipes-kernel”文件夾里面,依此類(lèi)推。因?yàn)槲覀兊膽?yīng)用是和Qt相關(guān),因此我們?cè)凇眒eta-projects”目錄下創(chuàng)建名字為”recipes-qt”的文件夾。

e). 在”recipes-qt”文件夾里面,我們?yōu)槊恳粋€(gè)應(yīng)用程序創(chuàng)建一個(gè)以應(yīng)用名字命名的文件夾。


6). 編輯recipes功能和項(xiàng)目(GitHub下載,自動(dòng)運(yùn)行等)

a). 我們基于下面實(shí)現(xiàn)編譯和安裝一個(gè)”HelloWorld” C程序的簡(jiǎn)單recipes來(lái)編寫(xiě)我們的recipes。


b). 在每一個(gè)recipe文件夾,我們創(chuàng)建一個(gè)作為recipe本身的”.bb”文件。這個(gè)文件應(yīng)包含下面一些基本變量如:

./ DEscriptION – recipe簡(jiǎn)述以及其包含的軟件

./ SECTION – recipe 類(lèi)型說(shuō)明

./ LICENSE – recipe或軟件適用的license文件

./ LIC_FILES_CHKSUM – license文件的Checksum號(hào)

./ SRC_URI – 應(yīng)用或者其源代碼地址

./ SRCREV – GitHub對(duì)應(yīng)的所需commit 標(biāo)簽


我們第一個(gè)程序所用的recipe文件如下,第二個(gè)recipe依此類(lèi)推。


c). 分析上面recipe,我們可以發(fā)現(xiàn)一些重要項(xiàng)目。

./ 在”LICENSE”條目我們聲明了所使用的license,MIT license在開(kāi)源項(xiàng)目中被廣泛使用,在”stuff/openembedded-core/meta/files/common-licenses/MIT”這里也可以找到。

./ Checksum 號(hào)可以通過(guò)一個(gè)Linux 應(yīng)用 md5sum獲取,如下操作。另外,如果項(xiàng)目不是開(kāi)源的,其他license也可以被直接使用或者創(chuàng)建,不過(guò)請(qǐng)一定聲明正確的license文件路徑和checksum。

---------------------

md5sum MIT

0835ade698e0bcf8506ecda2f7b4f302  MIT

---------------------

./ “SRC_URI” 聲明了應(yīng)用的路徑,在文本情境是一個(gè)GitHub路徑。應(yīng)用被下載,編譯,并安裝在我們鏡像的root 文件系統(tǒng)下。

./ “SRCREV”參數(shù)聲明要使用的倉(cāng)庫(kù)commit標(biāo)簽。可以進(jìn)入GitHub上你的 repositorycommit部分來(lái)查詢要使用的標(biāo)簽,https://github.com/giobauermeister/app-artigo-screen1/commits/master,然后點(diǎn)擊下面標(biāo)示的按鍵來(lái)保存標(biāo)簽,建議使用最新的commit。

./ “DEPENDS”那里我們聲明了一些Qt依賴。


d). 下一步,我們來(lái)準(zhǔn)備”do_install”功能,是負(fù)責(zé)用于安裝我們應(yīng)用初始化腳本的,同時(shí),我們還需要一個(gè)unit configuration file (.service),負(fù)責(zé)自動(dòng)啟動(dòng)我們應(yīng)用,即上面recipe文件中設(shè)計(jì)的下面兩個(gè)文件。

---------------------

${WORKDIR}/git/qt-artigo-embarcados-screen1.sh

${WORKDIR}/git/qt-artigo-embarcados-screen1.service

---------------------


./ 每一個(gè)程序的初始化腳本和unit文件都應(yīng)存放在對(duì)應(yīng)的GitHub倉(cāng)庫(kù)。以”.service”結(jié)尾的unitconfiguration文件編碼了由”system”控制和管理的操作流程。Service 文件可以在”/etc/systemd/system/”下找到,為了分配在”/lib/systemd/system/”下也有。服務(wù)可以通過(guò)systemctl命令被啟動(dòng)或者永久使能。更多關(guān)于”system”的信息請(qǐng)見(jiàn)Toradex開(kāi)發(fā)者中心這篇文章。

請(qǐng)注意安裝目錄是在Qt Creator project file (.pro)里面定義,如在本文”使用Qt Creator 創(chuàng)建應(yīng)用程序”章節(jié)所述。


./ Unit 文件 “qt-artigo-embarcados-screen1.service”內(nèi)容如下。另一個(gè)應(yīng)用的unit文件除了更改對(duì)應(yīng)的”ExecStart”路徑,其他是完全一樣的。

---------------------

[Unit]

Description=Starts Embarcados Qt demoapplication screen1

After=multi-user.target


[Service]

Type=simple

ExecStart=/usr/bin/qt-artigo-embarcados-screen1.sh


[Install]

WantedBy=multi-user.target

---------------------


./ 注意到unit文件調(diào)用了初始化腳本,screen1和screen2應(yīng)用的腳本內(nèi)容如下:

./ 注意命令” exportQT_QPA_EGLFS_FB=/dev/fb0”,這個(gè)命令用來(lái)聲明程序運(yùn)行使用的framebuffer,這個(gè)新參數(shù)是在Qt5中引入的。上面兩個(gè)腳本都需要上傳到GitHub每個(gè)應(yīng)用對(duì)應(yīng)的倉(cāng)庫(kù),并在系統(tǒng)鏡像編譯中被自動(dòng)下載和安裝。


7). 編譯image

a). 進(jìn)入oe-core目錄,對(duì)”export”文件進(jìn)行source操作來(lái)設(shè)置環(huán)境。在第一次調(diào)用時(shí)候,會(huì)同時(shí)在”build/conf”目錄下創(chuàng)建一些最簡(jiǎn)的配置文件”*.conf”。source操作后會(huì)讓我們進(jìn)入”build”目錄下,在這里我們將”bitbake”我們的鏡像。

b). 在”build/conf”目錄下我們發(fā)現(xiàn)有”bblayer.conf”和”local.conf”文件。包含我們鏡像所有資源的layers在”bblayer.conf”文件中被列出。之前我們?cè)凇眘tuff”文件夾復(fù)制了”meta-qt5” layer,現(xiàn)在我們將”meta-qt5”和”meta-projects”都添加到”bblayers.conf”文件。

c). 在”local.conf”文件中我們發(fā)現(xiàn)定義了一些編譯選項(xiàng)和設(shè)置,如編譯目標(biāo)平臺(tái),使用多少核心去編譯,下載路徑等。我們創(chuàng)建一個(gè)新的變量” IMAGE_INSTALL_append”,用來(lái)指明將被安裝的包括我們Qt應(yīng)用在內(nèi)的一些項(xiàng)目。

進(jìn)入”local.conf”文件,添加/修改如下內(nèi)容:

“ACCEPT_FSL_EULA”變量需要被設(shè)置,以確認(rèn)我們接受來(lái)自原來(lái)Freescale的license條款。在所有iMX6平臺(tái)都需要聲明這個(gè)。另外,我們也移除了一些桌面相關(guān)的項(xiàng)目,因?yàn)槲覀兊溺R像是console鏡像。

d). 在編輯完上面兩個(gè)配置文件后,我們進(jìn)入”build”目錄運(yùn)行下面”bitbake”命令開(kāi)始編譯流程。

---------------------

bitbake console-trdx-image

---------------------


8). 更新鏡像到計(jì)算機(jī)模塊

鏡像更新步驟在Toradex 開(kāi)發(fā)者中心文檔已經(jīng)被詳細(xì)描述,請(qǐng)見(jiàn)FlashingEmbedded Linux to iMX6 modules。


9). 測(cè)試我們的最終鏡像


更新鏡像后,Linux會(huì)自動(dòng)運(yùn)行,之后可以看到我們的應(yīng)用會(huì)自動(dòng)啟動(dòng)。另外也可以通過(guò)一些啟動(dòng)信息看到我們的systemd文件也啟動(dòng)了。


10). 總結(jié)

本文旨在為嵌入式系統(tǒng)編譯定制化鏡像提供基本指導(dǎo)。我們了解到一個(gè)鏡像可以被定制,改進(jìn)后應(yīng)用在一個(gè)產(chǎn)品中。我們也了解到關(guān)于git,layer和reciptes的概念。文本許多理念也在被一些公司使用,如Toradex,一個(gè)計(jì)算機(jī)模塊提供商。Toradex通過(guò)layers “meta-toradex”和”meta-toradex-extra”向它的客戶提供非常多的開(kāi)發(fā)資源,包括Board Support Package,examples,demos等。誰(shuí)知道下一個(gè)是不是就是你,通過(guò)創(chuàng)造images,layers或者applications來(lái)引領(lǐng)嵌入式系統(tǒng)世界新的革命!


參考文檔

http://developer.toradex.com/how-to/how-to-set-up-qt-creator-to-cross-compile-for-embedded-linux
http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#new-recipe-writing-a-new-recipe
http://playerstage.sourceforge.net/wiki/Cross_Compile_Player_with_Openembedded_and_BitBake#Player_Recipe
http://bec-systems.com/site/501/best-practices-for-building-qt-applications-with-openembedded
https://wiki.yoctoproject.org/wiki/Creating_a_recipe_for_a_Qt_application
https://github.com/meta-qt5
https://wiki.yoctoproject.org/wiki/Building_your_own_recipes_from_first_principles
https://community.freescale.com/docs/DOC-94849
https://wiki.yoctoproject.org/wiki/How_do_I
http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html
https://opensource.org/licenses/MIT
http://choosealicense.com/licenses/mit/
http://www.freedesktop.org/software/systemd/man/systemd.service.html
https://wiki.archlinux.org/index.php/Systemd
https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/
http://developer.toradex.com/knowledge-base/how-to-autorun-application-at-the-start-up-in-linux
http://www.embeddedlinux.org.cn/OEManual/recipes_examples.html
http://wiki.openmoko.org/wiki/BitBake_recipe
https://www.wolfssl.com/wolfSSL/Docs-beginners-guide-yocto-openembedded-recipe.html

文本最初以葡萄牙語(yǔ)發(fā)表于Embarcados.com,請(qǐng)見(jiàn)這里


下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產(chǎn)品

更多
主站蜘蛛池模板: 好物生环保网、环保论坛 - 环保人的学习交流平台 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 扬州汇丰仪表有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 14米地磅厂家价价格,150吨地磅厂家价格-百科| 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 迪威娱乐|迪威娱乐客服|18183620002| 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | _网名词典_网名大全_qq网名_情侣网名_个性网名 | 湖南自考_湖南自学考试网| 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | HDPE储罐_厂家-山东九州阿丽贝防腐设备 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 河南凯邦机械制造有限公司 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 微学堂-电动能源汽车评测_电动车性能分享网 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 |