聊聊開發和設計的一些話題
本次blog只講8個事情,主要包括核心、程序、規範等話題。
1. kernel編譯ko
kernel如何去編譯一個.ko檔案? 請看如下的Makefile
obj-m:=helloworld.o mymodule-objs:=module KDIR?= default: make -C $(KDIR) SUBDIRS=$(PWD) modules clean: make -C $(KDIR) SUBDIRS=$(PWD) clean
在make時刻只需要增加KDIR的引數傳遞即可,再補充靈魂-j999
make KDIR=/kernel/ -j999
2. epoll監聽檔案
可以說epoll大體上作為IO的監聽的主體,動不動來一個socket監聽,形成一個十萬級別的客戶端接入,但可以讓你頭疼在監聽一個GPIO,因為
GPIO你只能看電平value高低,看似沒用,其實不然,GPIO也有它的特性-中斷配置-EDGE,在這個裡面存在四個選項:
none,rising,falling,both
通常none,epoll是沒有反應的,當作普通檔案,說白了epoll是沒法監聽普通的檔案的。
3. shell註釋多行
這個shell註釋非常簡單,#oh my,即可,突然發現/**/更加舒服,但是shell也要多行註釋,搜了下發現: ' '
: ' ’
記住,看到的間隙都是空格。
4. 程序間通訊
程序間可以實現多種的通訊方式,如訊息佇列(非必要不用,會爆倉),管道(很多時候不用),socket(經常用),共享記憶體(過於高階,不捨得用)等等,其實可以有一些活用,例如訊息佇列程序間提供執行緒使用,共享記憶體也如此。
5. git merge
當你開發master一個而已,不需要merge,當bugfix 需要開很多個branch,那麼經常性的merge很必要,merge master或者 merge bugfix 分支,merge更加體現修復問題的清晰,方便團隊開發。
6. 製作.so 檔案實現
#!/bin/sh #add arm arm-linux-gnueabi-gcc #arm-linux-gnueabi-gcc -fPIC -c socket.c #arm-linux-gnueabi-gcc -fPIC -shared -o libsocket.so socket.o gcc -fPIC -c socket.c gcc -fPIC -shared -o libsocket.so socket.o #cp libsocket.so /lib -fa gcc main.c -o test -lsocket echo "built done"
-fPIC 作為製作動態庫.so的條件。
7. 程式設計規範守則細聊-杜絕更多if-else 或者 else
當你需要找一個電腦,電腦系統是linux的,執行快的。
此處存在三個條件,通常的情況如下:
if ( product == computer ) { if ( system == linux ) { if ( speed == fast ) { } } }
能寫兩行堅決不寫一行,show me the code , dont talk too much.
if ( product != computer ) { return -1; } if ( system != linux ) { return -1; } if (speed != fast ) { return -1; }
儘可能跳出來,讓別人debug更加容易,可讀性也強了,else到底去哪裡了。
8. 資料結構和介面實現
這樣的設計邏輯是在最近的開發應用上不斷練就的技能,作為開發設計不應該只coding,而不管設計。
好的code應該從結構一眼看到50%,才到介面實現。
例如存放一個學生的資訊:
1. 先定義一個結構體
struct student { char name[32]; int age; struct student *next; };
s1->s2->s3.....
2 定義介面
插入資料和刪除資料介面。