在lk中我們一般通過dprintf來列印log,如下所示
dprintf(info, " 0x%x", t->tls[i]);
其中info表示log的級別,lk中總共有三種級別
/* debug levels */
#define critical 0
#define always 0
#define info 1
#define spew 2
繼續看dprintf的實現
#define dprintf(level, x...) do } while (0)
發現如果你要列印的級別小於debuglevel,log才會被列印出來
#if defined(debug)
#define debuglevel debug
#else
#define debuglevel 2
#endif
可以看到如果沒有定義debug的話,debuglevel 預設等於2,也就是所有的log都能印出來
_dprintf的實現如下:
int _dprintf(const char *fmt, ...)
log具體是呼叫dputs來印出來的,我們繼續看看其實現
#define dputs(level, str) do } while (0)
向上面一樣,也是要判斷log level,繼續呼叫 _dputs來印log,_dputs就是具體平台的實現了,我們看乙個已經實現的例子。
int _dputs(const char *str)
return 0;
}通過乙個while 迴圈將字串中的字元乙個乙個通過_dputc列印出來
void _dputc(char c)
#define reg8(addr) ((volatile uint8_t *)(addr))
可以看到就是只要將字串寫到uart的暫存器中,hw就會自動將字元列印出來
lk中中斷的處理flow
在li的crt0.s 中會定義中斷的入口。例如如果是irq中斷會呼叫arm irq start breset barm undefined barm syscall barm prefetch abort barm data abort barm reserved barm irq barm fiq...
lk中的bio機制 2
bio中除了可以使用真實的block dev,還可以使用memory中的block dev,這樣每次可以讀寫block count 的資料,加快讀寫的速度。int create membdev const char name,void ptr,size t len create membdev會建立...
高通LK中GPIO的配置和使用
高通 lk中的gpio配置函式定義 void gpio tlmm config uint32 t gpio,uint8 t func,uint8 t dir uint8 t pull,uint8 t drvstr,uint32 t enable define gpio config addr x t...