王中丹,劉詩(shī)楠
(1.遼寧廣播電視大學(xué)信息工程學(xué)院,沈陽(yáng)110034;2.廣發(fā)銀行股份有限公司沈陽(yáng)分行,沈陽(yáng)110000)
Linux應(yīng)用程序分類(lèi)與開(kāi)發(fā)方法
王中丹1,劉詩(shī)楠2
(1.遼寧廣播電視大學(xué)信息工程學(xué)院,沈陽(yáng)110034;2.廣發(fā)銀行股份有限公司沈陽(yáng)分行,沈陽(yáng)110000)
Linux操作系統(tǒng)以其開(kāi)放源代碼資源和免費(fèi)的特性,廣泛應(yīng)用在各種系統(tǒng)如臺(tái)式計(jì)算機(jī)、大型機(jī)和超級(jí)計(jì)算機(jī)中。嵌入式linux是將日益流行的Linux操作系統(tǒng)進(jìn)行裁剪修改,使之能在嵌入式計(jì)算機(jī)系統(tǒng)上運(yùn)行的一種操作系統(tǒng),廣泛應(yīng)用在移動(dòng)電話、個(gè)人數(shù)字助理(PDA)、媒體播放器、消費(fèi)性電子產(chǎn)品以及工業(yè)控制、航空航天等領(lǐng)域。隨著國(guó)內(nèi)Linux應(yīng)用的普及和水平的提高,使用Linux或嵌入式Linux作為操作系統(tǒng),在其上面開(kāi)發(fā)應(yīng)用程序的越來(lái)越多。但是,如何開(kāi)發(fā)Linux應(yīng)用程序?Linux應(yīng)用程序有哪些類(lèi)型?在目前出版的刊物當(dāng)中很少有這方面的內(nèi)容,對(duì)于初學(xué)者來(lái)講十分困惑。在此就作者本人在Linux和C語(yǔ)言方面的開(kāi)發(fā)和教學(xué)當(dāng)中的經(jīng)驗(yàn),就Linux程序的開(kāi)發(fā)及編譯、執(zhí)行等過(guò)程,Linux和嵌入式開(kāi)發(fā)的分類(lèi)等進(jìn)行一個(gè)介紹和說(shuō)明。
服務(wù)器;客戶端;套接字;監(jiān)控;后臺(tái)程序;編譯;可執(zhí)行文件;進(jìn)程;嵌入式開(kāi)發(fā)
首先,我們經(jīng)常講嵌入式開(kāi)發(fā),那么,什么是嵌入式系統(tǒng)?可能比較難回答,或者回答的不完全。一般來(lái)講,嵌入式系統(tǒng)的定義為:嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶應(yīng)用程序等四個(gè)部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能[1]。為了區(qū)別于原有的通用計(jì)算機(jī)系統(tǒng),把嵌入到對(duì)象體系中,實(shí)現(xiàn)對(duì)象體系智能化控制的計(jì)算機(jī),稱作嵌入式計(jì)算機(jī)系統(tǒng)。
從是否使用操作系統(tǒng)來(lái)講,可以分為在操作系統(tǒng)上(常見(jiàn)的操作系統(tǒng)包括uClinux、Ubuntu、Fedora、OpenSUSE等)的開(kāi)發(fā)和無(wú)操作系統(tǒng)的開(kāi)發(fā)[1],這個(gè)分類(lèi)主要是針對(duì)嵌入式開(kāi)發(fā)而言。如以前的51單片機(jī)或ARM芯片上的開(kāi)發(fā),主要是在廠商提供的開(kāi)發(fā)平臺(tái)上直接用標(biāo)準(zhǔn)C語(yǔ)言進(jìn)行編程,編程完畢以后,通過(guò)集成平臺(tái)進(jìn)行Debug,最后生成可執(zhí)行文件[1],然后,將可執(zhí)行文件直接燒寫(xiě)到芯片當(dāng)中。這種開(kāi)發(fā)基本上是在小型儀表或小型控制模塊當(dāng)中應(yīng)用的比較多。應(yīng)用程序規(guī)模比較小,功能單一。優(yōu)點(diǎn)是由于沒(méi)有操作系統(tǒng),系統(tǒng)啟動(dòng)速度相對(duì)有操作系統(tǒng)來(lái)講比較快[7]。
另外一種就是將標(biāo)準(zhǔn)Linux中不用的功能進(jìn)行裁剪,只留下有用的功能,形成一個(gè)小操作系統(tǒng),應(yīng)用程序在標(biāo)準(zhǔn)Linux操作系統(tǒng)上進(jìn)行編譯和調(diào)試,然后,下載到嵌入式Linux上面進(jìn)行調(diào)試和應(yīng)用。這種應(yīng)用程序由于是運(yùn)行在Linux操作系統(tǒng)上,因此,可以實(shí)現(xiàn)更復(fù)雜的功能,但仍然主要是應(yīng)用在工業(yè)控制當(dāng)中。對(duì)于大型的應(yīng)用軟件來(lái)講,主要是直接運(yùn)行在沒(méi)有裁剪的操作系統(tǒng)上[1]。
對(duì)于嵌入式操作系統(tǒng)來(lái)講,由于裁剪了操作系統(tǒng)多余的功能,只保留了需要的功能,因此,這種系統(tǒng)的運(yùn)行效率非常高,程序需要的資源也不多,是目前嵌入式開(kāi)發(fā)采用的主要方法。但是,這種開(kāi)發(fā)涉及硬件電路的設(shè)計(jì)制作及Linux操作系統(tǒng)的裁剪,對(duì)于這方面的技術(shù)要求比較高,需要有嵌入式硬件開(kāi)發(fā)的專(zhuān)業(yè)技術(shù)人員進(jìn)行硬件設(shè)計(jì),然后,有嵌入式軟件技術(shù)人員進(jìn)行Linux的裁剪,最后,再由普通的C語(yǔ)言開(kāi)發(fā)技術(shù)人員進(jìn)行應(yīng)用程序開(kāi)發(fā)[1、7]。
上面講到了目前嵌入式開(kāi)發(fā)的主流是在Linux操作系統(tǒng)上的開(kāi)發(fā),接下來(lái)介紹Linux應(yīng)用程序的分類(lèi)及開(kāi)發(fā)方法。
(1)普通應(yīng)用程序[2-3]
如下程序,等待從鍵盤(pán)輸入2個(gè)自然數(shù),然后,計(jì)算出兩個(gè)數(shù)的平均數(shù),并將結(jié)果打印在屏幕上。
如上程序,一般在Window上通過(guò)文本編輯器,保存到文件當(dāng)中sample.c,然后通過(guò)ftp工具上傳到Linux服務(wù)器上的用戶開(kāi)發(fā)目錄,通過(guò)cc編譯器進(jìn)行編譯,即可生成可執(zhí)行文件。最后,在命令行執(zhí)行可執(zhí)行文件[1]。
該程序執(zhí)行一次就結(jié)束了,這是最普通的Linux程序,通過(guò)cc編譯器編譯生成可執(zhí)行代碼,程序的啟動(dòng)通過(guò)命令行啟動(dòng)。
(2)帶有界面的應(yīng)用程序
最典型的就是Linux上面自帶的計(jì)算器。當(dāng)啟動(dòng)計(jì)算器以后,在Linux Desktop畫(huà)面上出現(xiàn)一個(gè)計(jì)算器畫(huà)面,在此輸入數(shù)據(jù)進(jìn)行計(jì)算,然后,顯示出計(jì)算結(jié)果。如此,反復(fù)執(zhí)行各種計(jì)算,只要不關(guān)閉畫(huà)面,應(yīng)用程序就一直在執(zhí)行。這種應(yīng)用程序的啟動(dòng)也是需要通過(guò)手動(dòng)方法來(lái)啟動(dòng)。最早的Linux界面程序基本上是用X-Window方法來(lái)開(kāi)發(fā)的,現(xiàn)在,主要采用QT來(lái)開(kāi)發(fā)[1]。
(3)Linux后臺(tái)服務(wù)程序
例如用戶自己開(kāi)發(fā)的一些如性能監(jiān)控程序,當(dāng)服務(wù)器啟動(dòng)以后,性能監(jiān)控程序就一直在后臺(tái)處于運(yùn)行狀態(tài)。當(dāng)客戶端連接到服務(wù)器以后,服務(wù)程序每隔一定時(shí)間間隔向客戶端發(fā)送一次服務(wù)器的性能監(jiān)控?cái)?shù)據(jù),當(dāng)客戶端斷開(kāi)連接以后,服務(wù)程序就處于等待狀態(tài)。每隔一定時(shí)間收集一次性能監(jiān)控?cái)?shù)據(jù),但是由于沒(méi)有客戶端連接,因此不向客戶端發(fā)送數(shù)據(jù)。其它提供應(yīng)用服務(wù)的程序都稱為服務(wù)程序。如我們?cè)诎俣人阉饕娈?huà)面輸入一個(gè)關(guān)鍵字,執(zhí)行搜索,一會(huì)兒就會(huì)在畫(huà)面上顯示好多搜索結(jié)果。這其實(shí)是畫(huà)面向后臺(tái)服務(wù)器提交一個(gè)搜索關(guān)鍵詞請(qǐng)求,后臺(tái)服務(wù)程序通過(guò)各種搜索方法執(zhí)行搜索,然后,將搜索結(jié)果和超鏈接發(fā)送到前臺(tái),在畫(huà)面上顯示出來(lái)。我們常見(jiàn)的銀行存取款系統(tǒng)是一個(gè)典型的C/S系統(tǒng),客戶端將賬號(hào)和密碼提交給后臺(tái)服務(wù)器,后臺(tái)服務(wù)器用賬號(hào)和密碼查詢核心數(shù)據(jù)庫(kù),然后將該賬戶的金額等信息返回到柜臺(tái)計(jì)算機(jī),在柜臺(tái)畫(huà)面上顯示,以進(jìn)行存取款等各種操作[5]。
(4)Linux后臺(tái)服務(wù)程序的特點(diǎn)
上面介紹了Linux服務(wù)程序,那么,Linux后臺(tái)服務(wù)器程序有哪些特點(diǎn)?程序如何編制和編譯?對(duì)于Linux系統(tǒng)服務(wù)程序來(lái)講,常用的一個(gè)概念就是守護(hù)進(jìn)程。這其實(shí)是一個(gè)典型的系統(tǒng)服務(wù)程序,在機(jī)器啟動(dòng)以后自動(dòng)啟動(dòng),并常駐內(nèi)存,一直提供服務(wù),也不需要手動(dòng)啟動(dòng)。這種程序稱為守護(hù)進(jìn)程,比如,ftp、telnet等服務(wù)[4]。
守護(hù)進(jìn)程是Linux中的后臺(tái)服務(wù)進(jìn)程。它是一個(gè)生存期較長(zhǎng)的進(jìn)程,通常獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。守護(hù)進(jìn)程的三個(gè)最基本的特點(diǎn)是后臺(tái)運(yùn)行、獨(dú)立于終端、完成一定的任務(wù)。
編程要點(diǎn)如下:
(1)在后臺(tái)運(yùn)行;
(2)脫離控制終端,登錄會(huì)話和進(jìn)程組;
(3)禁止進(jìn)程重新打開(kāi)控制終端;
(4)關(guān)閉打開(kāi)的文檔描述符;
(5)改變當(dāng)前工作目錄;
(6)重設(shè)文檔創(chuàng)建掩模;
(7)處理SIGCHLD信號(hào)。
如下是一個(gè)守護(hù)進(jìn)程實(shí)例:
守護(hù)進(jìn)程實(shí)例包括兩部分:主程式test.c和初始化程式init.c。主程式每隔一分鐘向/tmp目錄中的日志test.log報(bào)告運(yùn)行狀態(tài);初始化程式中的init_daemon函數(shù)負(fù)責(zé)生成守護(hù)進(jìn)程。讀者能夠利用init_daemon函數(shù)生成自己的守護(hù)進(jìn)程[4]。
關(guān)于服務(wù)程序的編譯,可以采用Linux開(kāi)發(fā)常用的方法進(jìn)行[6],就是將所有相關(guān)聯(lián)的文件及使用的庫(kù)文件,寫(xiě)到Makefile當(dāng)中,通過(guò)執(zhí)行Make命令來(lái)將源程序編譯成可執(zhí)行文件[1]。
將執(zhí)行文件的自動(dòng)啟動(dòng)命令加入到Linux自動(dòng)啟動(dòng)腳本文件當(dāng)中,這樣,當(dāng)Linux操作系統(tǒng)啟動(dòng)完畢以后,服務(wù)程序會(huì)自動(dòng)啟動(dòng)[1]。
以上是Linux服務(wù)程序的開(kāi)發(fā)步驟,對(duì)于嵌入式開(kāi)發(fā)系統(tǒng)來(lái)講,編譯命令不能直接使用Linux的gcc或g++來(lái)編譯,而要使用對(duì)應(yīng)嵌入式芯片提供的編譯命令進(jìn)行編譯[8]。編譯好以后,通過(guò)ftp命令下載到嵌入式主板,通過(guò)命令行賦予給服務(wù)程序可執(zhí)行權(quán)限,然后,將啟動(dòng)命令加入到自動(dòng)啟動(dòng)腳本即可。本文只介紹Linux服務(wù)程序的分類(lèi)和嵌入式開(kāi)發(fā)的步驟,具體每一部分的詳細(xì)內(nèi)容,請(qǐng)參照相關(guān)資料。
[1] 申華,劉龍,張?jiān)拼?嵌入式Linux系統(tǒng)軟硬件開(kāi)發(fā)與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2013.
Shenhua,Liulong,Zhangyuncui.Development and application of hardware and software for embedded Linux system[M].Beijing:Beihang University Press,2013.
[2] Neil Matthew,Richard Stons,著.Linux程序設(shè)計(jì)[M].陳健,宋健健,譯.北京:人民郵電出版社,2013.
Neil Matthew,Richard Stons.Beginning Linux Programming 4th Edition[M].Beijing:Posts&telecom Press,2013.
[3] 華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心.嵌入式Linux應(yīng)用程序開(kāi)發(fā)標(biāo)準(zhǔn)教程[M].北京:人民郵電出版社,2013.
China Huaqingyuanjian embedded training center.Linux application development standards tutorial[M].Beijing:Posts&telecom Press,2013
[4] 宋敬彬,孫海濱.Linux網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2010.
Songjingbin,Sunhaibin.Linux network programming[M].Beijing:Tsinghua university press,2010.
[5] 楊宗德.Linux高級(jí)程序設(shè)計(jì)(第2版)[M].北京:人民郵電出版社,2009.Yangzongde.Linux advanced programming[M].Beijing:Posts&telecom Press,2009.
[6] [美]施瓦茲,著.Linux應(yīng)用程序開(kāi)發(fā)[M].侯普秀,宋美娜,譯.北京:清華大學(xué)出版社,2006.
(USA)Carl Albing,(USA)Michael Schwarz.Houpuxiu,Songmeina Translate.Linux Application Development[M].Beijing:Tsinghua university press,2006.
[7] [美]RobertLove,著.Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(第3版)[M].陳莉君,康華,譯.北京:機(jī)械工業(yè)出版社,2011.
(USA)RobertLove.Design and development of Linux kernel[M].Beijing:Cina Machine Press,2011.
[8] 馮國(guó)進(jìn).Linux驅(qū)動(dòng)程序開(kāi)發(fā)實(shí)例[M].北京:機(jī)械工業(yè)出版社,2011.
Fengguojin.Linux Driver Development instance[M].Beijing:Cina Machine Press,2011.
Classification and Development Method of Linux App lication Software
Wang Zhongdan1,Liu Shinan2
(1.Information and Engineering Department,Liaoning Radio and TVUniversity,Shenyang 110034,China;2.China Guangfa Bank Shenyang Branch,Shenyang 110000,China)
Linux operating system is widely used in various systems such as desktop computers,mainframes and supercomputers because of its open source code and using free.The embedded Linux,as a system running on the embedded computer,ismodified by the popular Linux operating system,which is widely used in Mobile phones,Personal digital assistant(PDA),media player,consumer electronics,industrial control,aerospace and so on.With the popularity of domestic Linux applications and the improvement of the user level,more and more users are using Linux or embedded Linux as the operating system for application development.However,the beginners confuse and want to know how to develop Linux application and what the types of the Linux applications are.Itwould be very confused and puzzled for beginners.There are few relative contents in the journals.According to the experience of development and teaching about Linux and C language,development,compilation and execution process of programs for Linux,the classification of embedded development is described in this paper.
Server;Client;Socket;Monitor;Daemon;Compile;Executable-file;Process;Embedded Development
10.3969/j.issn.1002-2279.2015.06.017
TP3
B
1002-2279(2015)06-0062-03
王中丹(1962-),男,遼寧省錦州市人,副教授/碩士,主研方向:計(jì)算機(jī)軟件開(kāi)發(fā)。
2015-06-09