Linux之裝置驅動學習簡過程

來源:互聯網
上載者:User

為了記錄學習驅動過程,自己簡單的做了筆記。某年某月,當自己成為驅動高手的時候,我再回過頭看看自己當時的想法。。。應該這種感覺是妙不可言的 

So,come on!Everyday is nice! 

 關於基礎

1.tar 可以用來備份關鍵資料,而 dd 則可以用來備份整顆 partition 或 整顆 disk

2.vim區塊選擇(Visual Block)的功能

3.set 這個指令除了會將環境變數列出來之外,其它我們的自訂變數,與所有的變數,都會被列出來喔

4.uptime查看開機已耗用時間

5. head 和 tail 命令

  用法為:head -n  檔案名稱

6.lsmod rmmod insmod  modprobe

7.反組譯碼命令使用

arm-linux-objdump -D -S hello>log

8.wireshark 網路通訊協定分析器

-----------------------------------------------------------------

9.shell 學習

if [ $a1 = $a2 ]

.在[和]符號兩邊的左右都有空格
.=左右都有空格

a1="hello"
echo $a1

.變數賦值兩邊不能有空格
.bash中語句不需要分號

.比較符號:-eq -gt -lt -ne -ge -le -z(為空白) -n(不為空白)

.判斷檔案符號:-e -f -s -d -r -w -x

.if語句

if []
then
  #code
else if []
     then
 #code
     else
 #code
     fi
fi

.for語句
for var in [list]
do
   #code
done

.while語句
while []
do
   #code
done

.until語句
until []
do
   #code
done

.case 語句
case "$var" in
 condition1 )
 ;;
 condition2 )
 ;;
*)
 default statments;;
esac

-----------------------------------------------------------------

10.makefile

.$^:代表所有的依賴檔案
.$@:代表目標
.$<:代表第一個依賴檔案

11.時間

time_t t;
t=time(NULL); //目前時間

gettimeofday(&tpstart,NULL); // 開始時間 
function();
gettimeofday(&tpend,NULL);   // 結束時間

-----------------------------------------------------------------

12.
fork子進程拷貝父進程的資料區段,執行順序不定
vfork:子進程與父進程共用資料區段,子進程先運行

-----------------------------------------------------------------

13.exec函數族
exec啟動一個新程式,替換原有進程,PID不變

-----------------------------------------------------------------

14.進程通訊
.管道通訊
.訊號通訊
.共用記憶體

管道:
.無名管道pipe(int fd[2])
.有名管道mkfifo(const char* filename,mode_t,mode)

15.posix 可移植的作業系統介面

-----------------------------------------------------------------

16.訊息佇列
.返回索引值 key_t ftok(char* pathname,char proj)
.擷取隊列描述字 int msgget(key_t key,int msgflag)
.發送資訊 int msgsnd(int msqid,struct msgbuf* msgp,int msgsz,int msgflg)
.讀取資訊 int msgrcv(int msqid,struct msgbuf* msgp,int msgsz,long msgtyp,int msgflg)

17.訊號量
.二值號誌 0,1
.計數號誌 非負

18.多線程編程

.建立線程
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void *(*start_rtn)(void),void *arg)
tidp: 線程id
attr: 線程屬性
start_rtn: 線程執行函數
arg start_rtn:的參數

.等待線程
int pthread_join(pthread_t *tid,void **rval_ptr)
tid:等待退出的線程id
rval_ptr:線程傳回值的指標

.線程標識
pthread_t pthead_self(void)
返回線程id

-----------------------------------------------------------------

19.linux TCP/IP
.應用程式層 傳輸層 網路層 網路介面層

.socket三種類型:流式通訊端(SOCK_STREAM)----可靠的、資料通訊端(SOCK_DGRAM)----不可靠的,原始通訊端(SOCK_RAW).

.struct sockaddr_in記錄網路地址

.地址轉換
int inet_aton(const char *cp,struct in_addr *inp) 轉網路ip
char *inet_ntoa(struct in_addr in) 轉字元

.位元組序
網路傳輸 big endian

htons/htonl 發送時用的、主機序轉換到網路序
ntohs/ntohl 接收時用的、網路序轉換到主機序

.擷取ip或主機名稱
struct hostent *gethostbyname(const char *hostname)

-----------------------------------------------------------------
20.虛擬檔案系統
VFS隱藏各種檔案系統的具體細節,為檔案操作提供統一的介面。
 
21.核心開發,主要修改driver(驅動)和arch(體系架構)

-----------------------------------------------------------------

22.核心配置與編譯

.清除命令:make clean/make mrproper /make distclean

.確定目標系統軟硬體設定,例如cpu的類型,網卡型號,還有支援的網路通訊協定

.開始配置核心
執行命令:make menuconfig

.編譯
make zImage/make bzImage
*make zImage V=1 擷取編譯資訊

編譯好的核心位於:arch/<cpu>/boot/

.編譯核心模組
make modules

.安裝核心模組
make modules_install

/lib/modules

.製作init ramdisk

mkinitrd initrd-2.6.29 2.6.29

23.核心安裝步驟
. cp arch/x86/boot/bzImage /boot/vmlinuz-$version
. cp $initrd /boot/
. 修改/etc/grub.conf或者/etc/lilo.conf

24.核心模組

主要Makefile:

ifneq ($(KERNELRELEASE),)

obj-m :=hello.o

hello_objs: main.o add.o(多檔案)

else
KDIR:= /lib/modules/2.6.18-53.el5/build

all:
 make -C $(KDIR) M=$(PWD) modules
clean: 
 rm -f *.ko *.o *.mod.o *.mod.c .symvers
endif

模組參數:module_param(name,type,perm)
int a=3;
module_param(a,int,S_IRUGO);

-----------------------------------------------------------------

25.核心符號匯出---兩個模組以上有用
EXPORT_SYMBOL(符號名)
EXPORT_SYMBOL_GPL(符號名)

26.核心列印 /proc/sys/kernel/printk

27.工具鏈arm-linux-gcc

-----------------------------------------------------------------

28.BootLoader工作流程
stage1
.硬體裝置初始化
.為載入BootLoader的stage2準備RAM空間
.拷貝BootLoader的stage2到RAM空間
.設定好堆棧
.跳轉stage2的C進入點

stage2
.初始化本階段要使用的硬體裝置
.將核心和根檔案系統拷貝從flash拷貝到ram
.調用核心

-----------------------------------------------------------------

29.uboot

命令:help/printenv/setenv(添加、刪除、修改)/saveenv\
md/mm/flinfo/protect off(on) all/erase start end/
cp/go/bdinfo(開發板資訊)

移植:MCU/MPU參考

30.嵌入式核心製作
1.清除 make distclean
2.配置 make menuconfig ARCH=arm
3.編譯 make uImage ARCH=arm CROSS_COMPILE=arm-linux-

-----------------------------------------------------------------
31.製作根檔案系統
@建立根檔案系統的目錄
.mkdir rootfs
.cd rootfs
.mkdir bin dev etc lib proc sbin sys usr mnt tmp var
.mkdir usr/bin usr/lib usr/sbin lib/modules

@建立裝置檔案
.cd dev/
.mknod -m 666 console c 5 1
.mknod -m 666 null c 1 3

@安裝/etc
.tar  etc.tar.gz -C /xxx/rootfs

@編譯核心模組
.make modules ARCH=arm CROSS_COMPILE=arm-linux-

@安裝核心模組
.make modules_install ARCH=arm
INSTALL_MOD_PATH=/xxx/rootfs

@配置busybox

@編譯安裝 
make ARCH=ARM CROSS_COMPILE=arm-linux
make install

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.