隨想錄(linux的四個維度)

2021-06-05 23:59:33 字數 2568 閱讀 3101

linux系統是軟體開發歷史上的乙個傳奇。來自全球的個人、公司、團體為了完成開放和自由的訴求,在一種鬆散但是卻有效的方式下,成功地建立乙個偉大的生態系統。無論從軟體的規模和穩定性上面,linux都是首屈一指的。當然這裡說的linux更多的是乙個生態,它包括核心、驅動、庫檔案、gui、資料庫以及上層應用軟體。linux產生的基因決定了它的應用只能侷限在乙個小的範圍內。當然,你可以不服氣地說不是還有android嘛,但是我們要清楚android事實上是乙個建立在linux之上的虛擬機器,嚴格意義上說和linux的關係不是那麼大。沒有google的推廣和移動終端聯盟的支援,linux系統本身只能偏安一隅,在特定的領域發揮特定的作用,而不是像windows一樣成為所有人每天必須要面對的系統軟體。

當然,說了這麼多,我們真正關心的是自身可以從這個生態圈中獲得些什麼?說得更直白一點就是,我們可以從linux系統上面學到點什麼,它對我們個人的成長和發展有哪些積極的因素。個人覺得,完全可以通過下面四個維度並結合自己的興趣進行選擇和判斷。

(1)熟練學習linux、配置linux和使用linux

(2)利用linux開發應用層軟體

通俗意義上來說,利用linux開發應用層的軟體和windows上面開發應用軟體沒有什麼不同。可能,在windows上面使用得比較多的就是mfc、gdi、win32這些介面,而在嵌入式上面使用的就比較多種多樣了,什麼qt、minigui、gtk都是可以用來進行開發的。當然,上面說的都是介面程式,很多公司的linux程式是沒有介面的,比如說遊戲公司的linux工程師。相比較而言,他們看中的更多的是linux的穩定性,所以在linux上開發的更多的都是伺服器端程式。很多人都有乙個誤解,認為作業系統就一定比應用軟體高階,其實不然。在我看來,office、webkit、samba、mplayer這些軟體的**都是在百萬行以上,本身的結構也是相當複雜的。說到應用開發,網上有幾本書,分別是《linux程式設計》、《unix環境高階程式設計》、《unix網路程式設計》,對我們都很有借鑑意義。誠然有些書是基於unix系統的,但是基本的程式設計介面都是差不多的,相應的**在linux跑絕對沒問題。

(3)利用linux開發驅動

linux驅動其實並不複雜,我們要做的就是在linux統一的驅動框架下實現對外設的統一管理。很多的**架構都是現成的,所以我們只要做好模仿、學習、測試和驗證就可以了。比較簡單的**就是下面的這一段話,

#include #include module_license("gpl");

module_author("feixiaoxing");

module_description("this is just a hello module!\n");

static int __init hello_init(void)

static void __exit hello_exit(void)

module_init(hello_init);

module_exit(hello_exit);

載入模組就是輸入insmod hello.ko,解除安裝模組就是rmmod hello.ko。在這過程中,我們都可以看到相應的列印內容。當然,朋友們可以一直往裡面加**,一步步除錯,一步步學習,只要堅持和總結,都是可以學習好linux的驅動**的。

這裡順便把makefile也寫一下,

ifneq ($(kernelrelease),)

obj-m := hello.o

else

pwd := $(shell pwd)

kver := $(shell uname -r)

kdir := /lib/modules/$(kver)/build

all:

$(make) -c $(kdir) m=$(pwd) modules

clean:

rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

endif

(4)linux kernel**移植、修改和維護

linux kernel**相信是被很多人奉為經典的,但是linux kernel的**很長也很難。一方面,linux**存在技巧**、彙編**,同時部分函式冗長、檔案冗長、命名不規範,另外一方面linux的**分布合理、系統流程明顯、相關資料眾多。關鍵是我們自己怎麼從linux kernel中學到東西?是看書呢,還是看**呢?是每一行都看呢,還是按照模組看呢?是掌握主要原理呢,還是看實現技巧呢?是看高版本呢,還是先熟悉低版本呢?下面,我想就自己的經歷談談自己的看法,

a)熟悉的**認真看,不熟悉的**了解一下介面就可以,對於記憶體管理只要了解__get_free_page、kmalloc、vmalloc這幾個函式就可以了;

b)**不要貪多求快,多思考多實踐;

c)忽視技巧,看中**的處理流程和策略的權衡,多多思考為什麼要這麼設計;

d)利用module特性檢視**的執行日誌,代替函式堆疊的功能;

e)了解linux效能的改進方法,了解為什麼有軟中斷、rcu、slab和各種各樣的延時函式;

f)自己編寫os,實現記憶體管理、訊號量、訊息佇列、驅動開發、中斷和執行緒排程,深入理解os的流程。

隨想錄(linux的四個維度)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!linux系統是軟體開發歷史上的乙個傳奇。來自全球的個人 公司 團體為了完成開放和自由的訴求,在一種鬆散但是卻有效的方式下,成功地建立乙個偉大的生態系統。無論從軟體的規模和穩定性上面,linux都是首屈一指的。當然這裡說的linux更多的是乙個生態...

隨想錄(uclibc的學習)

對於交叉工具鏈來說,uclibc一般都是包括在工具鏈裡面的。通過uclibc,大家可以像開發x86使用者程式一樣,開發其他cpu上的應用程式。uclibc相比較glibc而言,包含的檔案較少,功能也有刪減,且每乙個目錄代表乙個動態庫,閱讀起來基本不會遇到什麼問題。1 uclibc的 怎麼看?建議直接...

隨想錄(epoll的使用)

要說linux下面最好用的介面恐怕就是epoll了。不管是網路程式設計,還是其他pipe程式設計,使用epoll都很方便。而且,epoll的函式個數少,結構也非常簡單。一般只要學好了epoll create epoll ctl epoll wait close這四個函式就可以了。如果大家有這方面的需...