原创 重寫、覆蓋、重載、多態幾個概念的區別分析

override->重寫(=覆蓋)、overload->重載、polymorphism -> 多態   override是重寫(覆蓋)了一個方法,

原创 根據內核Oops 定位代碼

內核開發時有時候出現Oops,例如一個野指針會導致內核崩潰,如運行時出現以下log:現在有三種方法可以找出具體出現野指針的地方 5.438972] bells bells: wm5102-aif1 <-> samsung-i2s

原创 git 開發分支模型

一般使用以下分支模型來開發項目,能夠使得本地 的相關修改基於輔服務器的最新版本,避免衝突。 master         主分支:用於跟服務器同步,永遠不要在裏頭更新,只做:git pull featur

原创 內核定時器

內核定時器可以實現定時執行某個事務,一個典型的應用就是使用內核定時器實現輪訓操作,因爲定時器到時後可以在定時器函數裏面重新定時啓用該定時器,達到循環啓用定時器的作用,這樣可以實現定時輪訓硬件<includ

原创 內核延遲操作

內核延遲操作 內核延遲分爲長延遲和段延遲, 長延時一般以jiffies爲單位, 短延時則以jiffy爲單位, 對於不同延遲應該選用不同的實現方法。 長延遲一般通過硬件時鐘滴答來實現,  對於長延遲,可以使

原创 堆與堆排序

堆排序與快速排序,歸併排序一樣都是時間複雜度爲O(N*logN)的幾種常見排序方法。學習堆排序前,先講解下什麼是數據結構中的二叉堆。 二叉堆的定義 二叉堆是完全二叉樹或者是近似完全二叉樹。 二叉堆滿足二個特性: 1.父結點的鍵值總是大於或

原创 利用用平臺GPIO LED調試

GPIO 驅動的 LED 由於操作簡單和可視化即可以在板上直接看到其閃爍時長和頻率,我們可以通過LED這種特性用於調試開發過程當中各種情景, 如統計某個中斷出發頻率,某些在linux 內核比較難以調試的環

原创 watchdog 分析

本文分析s3c2410-s3c watchdog linux驅動。 如圖, S3C2440的Watchdog模塊提供了三個寄存器來對Watchdog進行操作,他們分別是:定時器控制寄存器WTCON、定時器數據寄存器WTDAT和定時器計

原创 內核鏈表分析

藉助上一篇文章container_of(ptr, type, member) 的實現,討論分析鏈表在內核的實現。 我們用以下的結構體來描述一個學生struct student { char *na

原创 內核線程

linux 內核線程擁有獨立堆棧和優先級運行機制,內核線程跟用戶空間進程一樣用結構體struct task_struct來描述,所以從運行機制看,實際上就是一個進程,並且共享父進程資源,但是沒有自己獨立的

原创 內核container_of(ptr,type,member) 解析

container_of(ptr,type,member) 用於在已知結構體裏面成員member和該成員指針ptr(就是地址)和結構體類型type, 返回該成員所在的結構體的指針(就是地址), 例如已知s

原创 sudo時不需要每次都輸入root密碼

 在ubuntu等linux發行版本,有時需要藉助sudo取得root權限,但是每次都需要輸入root密碼,爲了方便開發,可修改 /etc/sudoers這個文件,如下:     # Members of

原创 信號量

信號量(semaphore)是用於保護臨界區的一種常用方法。只有得到信號量的進程才能執行臨界區代碼,而沒有得到信號量的進程進入休眠等待狀態。 1 定義信號量struct semaphore sem; i

原创 跟蹤Android callback 調用堆棧

0 在調試 android  系統時可以通過打印調用堆棧 callback stack 來分析和解決android問題。 1 java 層打印callback stack 可以通過 catch exception 然後 使用 Log.w(

原创 解析 Section Mismatch

Section Mismatch 可能引發非法內存訪問,進而引發內核crush崩潰0 配置 Section Mismatch 檢測 CONFIG_DEBUG_SECTION_MISMATCH=y1 如何引