
一直以來寫linux驅(qū)動(dòng),都是按照固定格式,定義一個(gè)初始化和退出函數(shù),書上告訴我這兩個(gè)函數(shù)會(huì)被調(diào)用,至于為什么會(huì)被調(diào)用,在哪調(diào)用,一直不清楚。
在嵌入式系統(tǒng)中,延時(shí)是經(jīng)常需要使用的一種手段,延時(shí)的方法可以通過使用類似于\"NOP\"的指令來實(shí)現(xiàn),但是如果延時(shí)的時(shí)間比較長(zhǎng),如果使用太多的\"NOP\" 指令則會(huì)消耗過多的儲(chǔ)存空間,最好的方法是使用子程序(匯編語言中)或子函數(shù)(高級(jí)語言中)。當(dāng)然這里并不打算討論如果使用定時(shí)器中斷來實(shí)現(xiàn)延時(shí)。下面就在C語言中使用子函數(shù)實(shí)現(xiàn)延時(shí)的幾個(gè)問題做些討論,當(dāng)然討論高級(jí)語言的延時(shí)就需要考慮編譯器和處理器,這里為了討論的方便,而且不失一般性,可以用標(biāo)準(zhǔn)51單片機(jī)作處理器和uVision2作為編譯環(huán)境,晶振為12MHz
在Linux中,先后出現(xiàn)了音頻設(shè)備的兩種框架OSS和ALSA,本節(jié)將在介紹數(shù)字音頻設(shè)備及音頻設(shè)備硬件接口的基礎(chǔ)上,展現(xiàn)OSS和ALSA驅(qū)動(dòng)的結(jié)構(gòu)。
SELinux帶給Linux的主要價(jià)值是:提供了一個(gè)靈活的,可配置的MAC機(jī)制。
在Linux中,僅等待CPU時(shí)間的進(jìn)程稱為就緒進(jìn)程,它們被放置在一個(gè)運(yùn)行隊(duì)列中,一個(gè)就緒進(jìn)程的狀 態(tài)標(biāo)志位為TASK_RUNNING。一旦一個(gè)運(yùn)行中的進(jìn)程時(shí)間片用完, Linux 內(nèi)核的調(diào)度器會(huì)剝奪這個(gè)進(jìn)程對(duì)CPU的控制權(quán),并且從運(yùn)行隊(duì)列中選擇一個(gè)合適的進(jìn)程投入運(yùn)行。
當(dāng)一個(gè)進(jìn)程結(jié)束了運(yùn)行或在半途中終止了運(yùn)行,那么內(nèi)核就需要釋放該進(jìn)程所占用的系統(tǒng)資源。這包括進(jìn)程運(yùn)行時(shí)打開的文件,申請(qǐng)的內(nèi)存等。
初學(xué)時(shí)最好從命令行入手,這樣可以熟悉從編寫程序、編譯、調(diào)試和執(zhí)行的整個(gè)過程。編寫程序可以用vi或其它編輯器編寫。
如果從應(yīng)用層的應(yīng)用開發(fā)出發(fā),建議先熟悉API函數(shù)。如果從應(yīng)用層的界面開發(fā)出發(fā),則建議學(xué)習(xí)Qt,WinCE或Android等。
gcc是C編譯器,g++是C++編譯器,linux下cc一般是一個(gè)符號(hào)連接,指向gcc;gcc和g++都是GUN(組織)的編譯器。而CC則一般是makefile里面的一個(gè)名字,即宏定義,嘿,因?yàn)長(zhǎng)inux/Unix都是大小寫敏感的系統(tǒng),這點(diǎn)一定要注意。
隨著GPS(全球定位系統(tǒng))和便攜移動(dòng)設(shè)備的飛速發(fā)展,各種各樣以GPS為基礎(chǔ)的便攜式定位系統(tǒng)相繼出現(xiàn).嵌入式Linux以其開放性、安全性、健壯性和 穩(wěn)定性越來越成為各種便攜設(shè)備的主要開發(fā)平臺(tái),因此GPS模塊與嵌入式Linux平臺(tái)之間的通信成了實(shí)現(xiàn)定位系統(tǒng)的基礎(chǔ).
視頻監(jiān)控系統(tǒng)一直是監(jiān)控領(lǐng)域中的熱點(diǎn),它以直觀、方便、信息內(nèi)容豐富而在各個(gè)行業(yè)得到廣泛應(yīng)用,如:交通、電力、通信、石油、碼頭、倉庫、金融、政府機(jī)關(guān)企事業(yè)單位辦事窗口,和軍隊(duì)、公安、監(jiān)獄、水利/水廠、民航等要害部門。
由于很多人總問這個(gè)問題,所以這里做一個(gè)總結(jié)供大家參考。這里必須先說明,以下的步驟都是針對(duì)Linux系統(tǒng)的,并不面向WinCE。
學(xué)習(xí)Linux,內(nèi)核常識(shí)都有哪些?
Linux設(shè)備驅(qū)動(dòng)的難點(diǎn)在于復(fù)雜的,龐大的結(jié)構(gòu)。理清楚結(jié)構(gòu)和一個(gè)結(jié)構(gòu)與另外結(jié)構(gòu)的關(guān)系,以及l(fā)inux設(shè)備驅(qū)動(dòng)的層次性和層次封裝抽象性。對(duì)于linux設(shè)備驅(qū)動(dòng)的結(jié)構(gòu)有點(diǎn)像C++中的類,而層次與抽象有點(diǎn)像繼承的關(guān)系。
看到很多人提問非科班該如何學(xué)習(xí)編程,其實(shí)科班也基本靠自學(xué)。有句話叫“師傅領(lǐng)進(jìn)門修行靠個(gè)人”,再厲害的老師能教你的東西都是很有限的,真正的修行還是要靠自己。我本科是學(xué)數(shù)學(xué)的,雖然研究生是計(jì)算機(jī)專業(yè),但研究生往往是做研究工作,并不會(huì)接觸編程這么基本的東西,關(guān)于編程相關(guān)我都是靠自學(xué)。對(duì)于Android這一塊,是參加工作還開始接觸,開始自己學(xué)習(xí)的。
Android是Google公司開發(fā)的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng),它包括操作系統(tǒng)、中間件、用戶界面和應(yīng)用程序,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專利權(quán)障礙,并由Google公司于2007年11月5日正式發(fā)布。同時(shí),Google公司組建了一個(gè)開放手機(jī)聯(lián)盟,這個(gè)聯(lián)盟由中國(guó)移動(dòng)、摩托羅拉、高通、宏達(dá)電和T-Mobile等在內(nèi)的全球30多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成,Google通過與運(yùn)營(yíng)商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開放式的移動(dòng)電話軟件平臺(tái),在移
進(jìn)程是UNIX操作系統(tǒng)抽象概念中最基本的一種,其中涉及進(jìn)程的定義以及相關(guān)的概念,比如線程;它們?cè)趦?nèi)核中如何被列舉?如何創(chuàng)建?最終又如何消亡?讓我們通過下面的分析,一步步解開內(nèi)核進(jìn)程的神秘面紗。
Linux中可以支持多種文件系統(tǒng),而且支持各種文件系統(tǒng)之間相互訪問,這是因?yàn)橛幸粋€(gè)虛擬文件系統(tǒng)。虛擬文件系統(tǒng)也叫虛擬文件系統(tǒng)轉(zhuǎn)換(Virtual Filesystem Switch,簡(jiǎn)稱VFS),之所以說它虛擬,是因?yàn)樵撐募到y(tǒng)的各種數(shù)據(jù)結(jié)構(gòu)都是隨時(shí)建立或刪除的,在盤上并不永久存在,只能存放在內(nèi)存中。也就是說,只有VFS是無法工作的,因?yàn)樗皇钦嬲奈募到y(tǒng)。
這段時(shí)間看Linux內(nèi)核源碼的時(shí)候,經(jīng)常碰到vdso這個(gè)東西(像在Feature-fixup中,獲取時(shí)間等操作時(shí)),網(wǎng)上搜了一下,才知道了含義,原來這是Linux為了解決和glibc兼容而想出的絕招啊。下面是從Fedora中文郵件列表轉(zhuǎn)過來的,和大家分享一下。
本文主要嘗試解釋兩個(gè)問題:1. swappiness的確切含義是什么,它對(duì)內(nèi)核進(jìn)行頁回收機(jī)制的影響。2. swappiness設(shè)置成0,為什么系統(tǒng)仍然可能會(huì)有swap發(fā)生。