1、请实现宏定义,用于计算结构体成员相对于结构体起始地址的字节偏移;
答:#define GET_OFFSET(data,member) (size_t)(&(((typeof(data)*)0)->member))
解析:①、typeof 用于获取修饰变量的数据类型;
②、强转0为对应结构体类型,此时member的地址即是偏移量
参考链接:https://blog.csdn.net/baidu_33725271/article/details/69323694
2、Bootloader执行流程
bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 Linux 内核。
3、FLASH和EEPROM各自的特点
FLASH:按块为单位,电路简单,成本低,读写速度快;
EEPROM:按字节为单位,存储时间长,可擦写次数多,不易丢失;
4、Linux设备驱动模型的三个重要成员?platform总线的匹配规则?
答:设备驱动模型三个重要成员是 总线、设备、驱动;
platfoem总线的匹配规则是:要匹配的设备和驱动都要注册,设备可以在设备树里注册,也可以通过代码注册设备,匹配成功会去调用驱动程序里的probe函数(probe函数在这个platform_driver结构体中注册)。