1. 了解Linux的那個驅動?舉例講講。
a.驅動注冊過程:通過platform bus, platform_device_register和platform_driver_register時都會在總線查詢是否有匹配的設備或驅動,如果有就會調用driver的probe函數。 <延伸問題:device和driver通過什么匹配的?name或id_table(dtsi里面compatable字段)> b.驅動類型:字符設備(fb顯示設備)、塊兒設備、網絡設備 c.字符設備為例,驅動需要實現的函數fops:(open,read,write,release,store,show實現暴露給usr space的設備節點,suspend, resume並不是都實現這些)
2. 中斷上半部下半部
top half: spinlock_irqsave做很少的工作,需要快速處理完,一般是關中斷,清中斷標志位,保存數據,調用中斷下半部,開中斷。 botomm half: tasklet, workque(可以睡眠可以調度)。 中斷里用spin lock,不能用semphore(可以調度可以睡眠)
3. spinlock semphore mutex 區別
4. 內核空間和用戶空間通信方式
5. boot傳給kernel的參數
6. linux 進程調度方法
7. linux softirq
8. MMU作用
9. 訪問外部寄存器的方法 *(volatile unsigned int*)ADDR ioremap
10. 實現container_of: https://www.cnblogs.com/linux-37ge/p/10219359.html
#define member_offset(type, member) ((int)&(((type*)0)->member)) #define container_of(ptr, type, member) ({\
const typeof(((type*)0)->member) *_mptr = ptr; \ (type*)( (char*)_mptr - member_offset(type, member))})
11. 32位bit位反轉
unsigned reversebit(uint32 val){ uint32 ret = 0, loop = 32; while(loop--){ ret <<=1; ret |= val&0x1; val >>= 1; } }
12. 進程上下文,中斷上下文