原创 嵌入式中斷(stm32+linux)詳解

一開始學單片機時 就知道中斷這一個概念 看些視頻學了大半天 也是似懂非懂 看代碼也就是設置下寄存器寫下中斷服務程序而已 學的不是很深入 一直到現在 經過了<微機原理>這門課的學習 纔對中斷有了一定的深入瞭解 發現中斷也就是一門說

原创 不容錯過:Linux定時器的使用

用定時器的目的無非是爲了週期性的執行某一任務,或者是到了一個指定時間去執行某一個任務。要達到這一目的,一般有兩個常見的比較有效的方法。一個是用 linux內部的三個定時器,另一個是用sleep, usleep函數讓進程睡眠一段時間

原创 armlinux開發板用戶自動登錄

開發板:AM335 虛擬機:ubuntu 14.04 編譯器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf 開發板內核:linux 4.4.12 設置開發板自動登錄目前而言就兩

原创 USB驅動之主機控制器驅動

USB 主機驅動的整體結構: USB 主機控制器有 34種規格:OHCI (Open Host Controller Interface)、UHCI(Universal Host ControllerInterface) 和 E

原创 關於char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L

char :單字節變量類型,最多表示256個字符, wchar_t :寬字節變量類型,用於表示Unicode字符, 它實際定義在 wchar_t c = `A' ; wchar_t * p = L"Hello!" ; wc

原创 Linux驅動程序之阻塞和非阻塞IO

所謂阻塞方式block,顧名思義,就是進程或是線程執行到這些函數時必須等待某個事件的發生,如果事件沒有發生,進程或線程就被阻塞,函數不能立即返回。也就是說在執行設備操作時,若不能獲得資源,則掛起進程直到滿足可操作的條件後再進行操作

原创 uboot啓動第二階段之x-load分析

開發板:DM3730 虛擬機:ubuntu 14.04 編譯器:arm-none-linux-gnueabi x-loader: 這幾天小小的研究了一下linux的啓動機制 所裏這裏做個小小的總結吧 現在一般的芯片的linux啓動

原创 dm3730之支持Peripheral 啓動系統

開發板:DM3730 虛擬機:ubuntu 14.04 編譯器:arm-none-linux-gnueabi uboot:U-Boot 2010.06-00166-gbf92a97 開發板內核:Linux-2.6.37 文件系統:

原创 arm-linux之爲開發板寫上電自啓動程序之方法

開發環境 開發板:AM335 虛擬機:ubuntu 14.04 編譯器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf 開發板內核:linux 4.4.12 首先開發板的文件使用

原创 Linux設備驅動模型之platform總線深入淺出(加入設備樹)

在Linux2.6以後的設備驅動模型中,需關心總線,設備和驅動這三種實體,總線將設備和驅動綁定。在系統每註冊一個設備的時候,會尋找與之匹配的驅動;相反,在系統每註冊一個驅動的時候,會尋找與之匹配的設備,而匹配由總線完成。 對於依

原创 usb驅動之設備驅動

這裏所說的設備驅動是指從主機角度來看,怎麼訪問被插入的USB設備,而不是指USB設備內部本身運行的固件程序。USB 設備內的固件稱爲“設備用戶固件” , “設備用戶固件”完成設備內部的控制任務,並在 USB 傳輸中對接收到的設備請

原创 uboot命令之bootm詳解

開發板:DM3730 cortex-a8 虛擬機:ubuntu 14.04 編譯器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf 開發板內核:linux 4.4.12 boot

原创 Linux0.01內核三之輪轉到子進程執行

#define switch_to(n) {\ struct {long a,b;} __tmp; \ __asm__("cmpl %%ecx,_current\n\t" \ "je 1f\n\t" \ "movw

原创 常見linux驅動面試題

1、驅動中操作物理絕對地址爲什麼要先ioremap? 因爲在內核中操作的都是虛擬地址,內核訪問不到物理地址,只能通過ioremap映射爲虛擬地址 內核才能訪問此內存空間 2、設備驅動模型三個重要成員是?platform總線的匹配

原创 C語言,獲得堆棧增長方向的一種方法

static int stack_dir; static void find_stack_direction () { static char *addr = NULL; auto char dummy;