王中丹,劉詩楠
(1.遼寧廣播電視大學(xué)信息工程學(xué)院,沈陽110034;2.廣發(fā)銀行股份有限公司沈陽分行,沈陽110000)
Linux應(yīng)用程序分類與開發(fā)方法
王中丹1,劉詩楠2
(1.遼寧廣播電視大學(xué)信息工程學(xué)院,沈陽110034;2.廣發(fā)銀行股份有限公司沈陽分行,沈陽110000)
Linux操作系統(tǒng)以其開放源代碼資源和免費的特性,廣泛應(yīng)用在各種系統(tǒng)如臺式計算機、大型機和超級計算機中。嵌入式linux是將日益流行的Linux操作系統(tǒng)進行裁剪修改,使之能在嵌入式計算機系統(tǒng)上運行的一種操作系統(tǒng),廣泛應(yīng)用在移動電話、個人數(shù)字助理(PDA)、媒體播放器、消費性電子產(chǎn)品以及工業(yè)控制、航空航天等領(lǐng)域。隨著國內(nèi)Linux應(yīng)用的普及和水平的提高,使用Linux或嵌入式Linux作為操作系統(tǒng),在其上面開發(fā)應(yīng)用程序的越來越多。但是,如何開發(fā)Linux應(yīng)用程序?Linux應(yīng)用程序有哪些類型?在目前出版的刊物當(dāng)中很少有這方面的內(nèi)容,對于初學(xué)者來講十分困惑。在此就作者本人在Linux和C語言方面的開發(fā)和教學(xué)當(dāng)中的經(jīng)驗,就Linux程序的開發(fā)及編譯、執(zhí)行等過程,Linux和嵌入式開發(fā)的分類等進行一個介紹和說明。
服務(wù)器;客戶端;套接字;監(jiān)控;后臺程序;編譯;可執(zhí)行文件;進程;嵌入式開發(fā)
首先,我們經(jīng)常講嵌入式開發(fā),那么,什么是嵌入式系統(tǒng)?可能比較難回答,或者回答的不完全。一般來講,嵌入式系統(tǒng)的定義為:嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計算機系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶應(yīng)用程序等四個部分組成,用于實現(xiàn)對其他設(shè)備的控制、監(jiān)視或管理等功能[1]。為了區(qū)別于原有的通用計算機系統(tǒng),把嵌入到對象體系中,實現(xiàn)對象體系智能化控制的計算機,稱作嵌入式計算機系統(tǒng)。
從是否使用操作系統(tǒng)來講,可以分為在操作系統(tǒng)上(常見的操作系統(tǒng)包括uClinux、Ubuntu、Fedora、OpenSUSE等)的開發(fā)和無操作系統(tǒng)的開發(fā)[1],這個分類主要是針對嵌入式開發(fā)而言。如以前的51單片機或ARM芯片上的開發(fā),主要是在廠商提供的開發(fā)平臺上直接用標(biāo)準(zhǔn)C語言進行編程,編程完畢以后,通過集成平臺進行Debug,最后生成可執(zhí)行文件[1],然后,將可執(zhí)行文件直接燒寫到芯片當(dāng)中。這種開發(fā)基本上是在小型儀表或小型控制模塊當(dāng)中應(yīng)用的比較多。應(yīng)用程序規(guī)模比較小,功能單一。優(yōu)點是由于沒有操作系統(tǒng),系統(tǒng)啟動速度相對有操作系統(tǒng)來講比較快[7]。
另外一種就是將標(biāo)準(zhǔn)Linux中不用的功能進行裁剪,只留下有用的功能,形成一個小操作系統(tǒng),應(yīng)用程序在標(biāo)準(zhǔn)Linux操作系統(tǒng)上進行編譯和調(diào)試,然后,下載到嵌入式Linux上面進行調(diào)試和應(yīng)用。這種應(yīng)用程序由于是運行在Linux操作系統(tǒng)上,因此,可以實現(xiàn)更復(fù)雜的功能,但仍然主要是應(yīng)用在工業(yè)控制當(dāng)中。對于大型的應(yīng)用軟件來講,主要是直接運行在沒有裁剪的操作系統(tǒng)上[1]。
對于嵌入式操作系統(tǒng)來講,由于裁剪了操作系統(tǒng)多余的功能,只保留了需要的功能,因此,這種系統(tǒng)的運行效率非常高,程序需要的資源也不多,是目前嵌入式開發(fā)采用的主要方法。但是,這種開發(fā)涉及硬件電路的設(shè)計制作及Linux操作系統(tǒng)的裁剪,對于這方面的技術(shù)要求比較高,需要有嵌入式硬件開發(fā)的專業(yè)技術(shù)人員進行硬件設(shè)計,然后,有嵌入式軟件技術(shù)人員進行Linux的裁剪,最后,再由普通的C語言開發(fā)技術(shù)人員進行應(yīng)用程序開發(fā)[1、7]。
上面講到了目前嵌入式開發(fā)的主流是在Linux操作系統(tǒng)上的開發(fā),接下來介紹Linux應(yīng)用程序的分類及開發(fā)方法。
(1)普通應(yīng)用程序[2-3]
如下程序,等待從鍵盤輸入2個自然數(shù),然后,計算出兩個數(shù)的平均數(shù),并將結(jié)果打印在屏幕上。
如上程序,一般在Window上通過文本編輯器,保存到文件當(dāng)中sample.c,然后通過ftp工具上傳到Linux服務(wù)器上的用戶開發(fā)目錄,通過cc編譯器進行編譯,即可生成可執(zhí)行文件。最后,在命令行執(zhí)行可執(zhí)行文件[1]。
該程序執(zhí)行一次就結(jié)束了,這是最普通的Linux程序,通過cc編譯器編譯生成可執(zhí)行代碼,程序的啟動通過命令行啟動。
(2)帶有界面的應(yīng)用程序
最典型的就是Linux上面自帶的計算器。當(dāng)啟動計算器以后,在Linux Desktop畫面上出現(xiàn)一個計算器畫面,在此輸入數(shù)據(jù)進行計算,然后,顯示出計算結(jié)果。如此,反復(fù)執(zhí)行各種計算,只要不關(guān)閉畫面,應(yīng)用程序就一直在執(zhí)行。這種應(yīng)用程序的啟動也是需要通過手動方法來啟動。最早的Linux界面程序基本上是用X-Window方法來開發(fā)的,現(xiàn)在,主要采用QT來開發(fā)[1]。
(3)Linux后臺服務(wù)程序
例如用戶自己開發(fā)的一些如性能監(jiān)控程序,當(dāng)服務(wù)器啟動以后,性能監(jiān)控程序就一直在后臺處于運行狀態(tài)。當(dāng)客戶端連接到服務(wù)器以后,服務(wù)程序每隔一定時間間隔向客戶端發(fā)送一次服務(wù)器的性能監(jiān)控數(shù)據(jù),當(dāng)客戶端斷開連接以后,服務(wù)程序就處于等待狀態(tài)。每隔一定時間收集一次性能監(jiān)控數(shù)據(jù),但是由于沒有客戶端連接,因此不向客戶端發(fā)送數(shù)據(jù)。其它提供應(yīng)用服務(wù)的程序都稱為服務(wù)程序。如我們在百度搜索引擎畫面輸入一個關(guān)鍵字,執(zhí)行搜索,一會兒就會在畫面上顯示好多搜索結(jié)果。這其實是畫面向后臺服務(wù)器提交一個搜索關(guān)鍵詞請求,后臺服務(wù)程序通過各種搜索方法執(zhí)行搜索,然后,將搜索結(jié)果和超鏈接發(fā)送到前臺,在畫面上顯示出來。我們常見的銀行存取款系統(tǒng)是一個典型的C/S系統(tǒng),客戶端將賬號和密碼提交給后臺服務(wù)器,后臺服務(wù)器用賬號和密碼查詢核心數(shù)據(jù)庫,然后將該賬戶的金額等信息返回到柜臺計算機,在柜臺畫面上顯示,以進行存取款等各種操作[5]。
(4)Linux后臺服務(wù)程序的特點
上面介紹了Linux服務(wù)程序,那么,Linux后臺服務(wù)器程序有哪些特點?程序如何編制和編譯?對于Linux系統(tǒng)服務(wù)程序來講,常用的一個概念就是守護進程。這其實是一個典型的系統(tǒng)服務(wù)程序,在機器啟動以后自動啟動,并常駐內(nèi)存,一直提供服務(wù),也不需要手動啟動。這種程序稱為守護進程,比如,ftp、telnet等服務(wù)[4]。
守護進程是Linux中的后臺服務(wù)進程。它是一個生存期較長的進程,通常獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護進程常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止。守護進程的三個最基本的特點是后臺運行、獨立于終端、完成一定的任務(wù)。
編程要點如下:
(1)在后臺運行;
(2)脫離控制終端,登錄會話和進程組;
(3)禁止進程重新打開控制終端;
(4)關(guān)閉打開的文檔描述符;
(5)改變當(dāng)前工作目錄;
(6)重設(shè)文檔創(chuàng)建掩模;
(7)處理SIGCHLD信號。
如下是一個守護進程實例:
守護進程實例包括兩部分:主程式test.c和初始化程式init.c。主程式每隔一分鐘向/tmp目錄中的日志test.log報告運行狀態(tài);初始化程式中的init_daemon函數(shù)負(fù)責(zé)生成守護進程。讀者能夠利用init_daemon函數(shù)生成自己的守護進程[4]。
關(guān)于服務(wù)程序的編譯,可以采用Linux開發(fā)常用的方法進行[6],就是將所有相關(guān)聯(lián)的文件及使用的庫文件,寫到Makefile當(dāng)中,通過執(zhí)行Make命令來將源程序編譯成可執(zhí)行文件[1]。
將執(zhí)行文件的自動啟動命令加入到Linux自動啟動腳本文件當(dāng)中,這樣,當(dāng)Linux操作系統(tǒng)啟動完畢以后,服務(wù)程序會自動啟動[1]。
以上是Linux服務(wù)程序的開發(fā)步驟,對于嵌入式開發(fā)系統(tǒng)來講,編譯命令不能直接使用Linux的gcc或g++來編譯,而要使用對應(yīng)嵌入式芯片提供的編譯命令進行編譯[8]。編譯好以后,通過ftp命令下載到嵌入式主板,通過命令行賦予給服務(wù)程序可執(zhí)行權(quán)限,然后,將啟動命令加入到自動啟動腳本即可。本文只介紹Linux服務(wù)程序的分類和嵌入式開發(fā)的步驟,具體每一部分的詳細內(nèi)容,請參照相關(guān)資料。
[1] 申華,劉龍,張云翠.嵌入式Linux系統(tǒng)軟硬件開發(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è)計[M].陳健,宋健健,譯.北京:人民郵電出版社,2013.
Neil Matthew,Richard Stons.Beginning Linux Programming 4th Edition[M].Beijing:Posts&telecom Press,2013.
[3] 華清遠見嵌入式培訓(xùn)中心.嵌入式Linux應(yīng)用程序開發(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高級程序設(shè)計(第2版)[M].北京:人民郵電出版社,2009.Yangzongde.Linux advanced programming[M].Beijing:Posts&telecom Press,2009.
[6] [美]施瓦茲,著.Linux應(yīng)用程序開發(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è)計與實現(xiàn)(第3版)[M].陳莉君,康華,譯.北京:機械工業(yè)出版社,2011.
(USA)RobertLove.Design and development of Linux kernel[M].Beijing:Cina Machine Press,2011.
[8] 馮國進.Linux驅(qū)動程序開發(fā)實例[M].北京:機械工業(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-),男,遼寧省錦州市人,副教授/碩士,主研方向:計算機軟件開發(fā)。
2015-06-09