嵌入式Linux开发核心自测题全系列精华浓缩这份自测题覆盖了从入门理论到实战操作的所有核心知识点。每题都对应一个必须掌握的内容。你可以用它反复自检查漏补缺。建议先自答再对照要点。文章目录嵌入式Linux开发核心自测题全系列精华浓缩一、嵌入式系统基础与开发环境二、BootloaderU-Boot三、Linux内核基础四、设备树Device Tree五、内核配置与Kconfig六、Tina-SDK 开发环境与内核编译七、内核启动与调试八、驱动添加实战LCD触摸屏九、驱动添加实战用户按键十、Git与内核代码追溯十一、综合与进阶补充必考题共8题一、嵌入式系统基础与开发环境1. 什么是交叉编译为什么嵌入式开发要用交叉编译答在PCx86上编译出ARM等目标平台能运行的程序。因为开发板资源有限无法运行编译器。2. 交叉编译工具链的前缀arm-linux-gnueabihf-中各个部分含义答arm架构、linux操作系统、gnueabihfC库及硬浮点ABI。3. 本地编译与交叉编译的区别是什么答本地编译编译器和目标平台相同交叉编译编译器运行平台与目标平台不同。4. 什么是sysroot作用是什么答交叉编译时的假根目录存放目标平台的头文件和库避免错误使用主机文件。5.make menuconfig和make kernel_menuconfig在TinaSDK中有什么区别答前者配置Tina系统的软件包后者配置Linux内核临时永久配置内核模块应使用前者。二、BootloaderU-Boot6. U-Boot 的主要作用是什么答初始化硬件、加载内核和设备树、提供命令行接口、支持烧录和调试。7. U-Boot 中如何查看环境变量、修改并保存答printenv查看setenv修改saveenv保存。8. U-Boot 启动内核的常用命令是什么答bootz 内核地址 - 设备树地址zImagebootmuImage。9. 如何单独编译U-Boot而不重新编译整个系统答进入lichee/brandy-2.0/u-boot-2018/执行make 板子_defconfig然后make -jN。10.bootargs环境变量作用是什么举例三个常用参数。答传递给内核的命令行参数。例如consolettyS3,115200、root/dev/mmcblk0p5、rootwait。三、Linux内核基础11. Linux内核官网kernel.org中的 mainline、stable、longterm 分别什么意思答mainline主线开发最新功能stable稳定版只修buglongterm长期支持版维护数年。12. 如何查看当前内核版本号答uname -r。13. 内核源码目录中arch/、drivers/、fs/分别作用答arch/体系结构相关drivers/设备驱动fs/文件系统。14. 什么是内核模块优点是什么答动态加载的.ko文件无需重启内核就能加载/卸载驱动减小内核体积。15. 如何手动加载、卸载一个内核模块答insmod xx.ko、rmmod xx。推荐使用modprobe自动处理依赖。16. 加载模块失败insmod只返回Operation not permitted如何查看更多信息答使用dmesg | tail查看内核日志中的详细错误。17.modinfo命令作用答查看模块信息作者、许可证、参数、依赖。18. 如何查看当前已加载的模块答lsmod。19. 内核编译命令make -jN中的-j参数含义答并行编译的任务数通常设为CPU核心数的两倍。四、设备树Device Tree20. 设备树的作用是什么答描述硬件拓扑和资源使同一内核适配不同板子。21..dts和.dtb的区别答.dts源文件文本.dtb编译后的二进制文件由内核或U-Boot使用。22. 如何单独编译设备树答make dtbs内核源码目录下。23. 设备树中pio节点的作用是什么答引用引脚控制器节点用于配置引脚复用和电气属性。24.gpios pio PB 4 GPIO_ACTIVE_LOW;中每个参数含义答引用pio控制器、bank PB、引脚4、低电平有效。五、内核配置与Kconfig25.menuconfig中选项前的\*、M、[ ]分别代表什么答*编译进内核M编译为模块[ ]排除。26. 如何快速搜索某个配置项如printk答在menuconfig中按/键输入关键词。27. 某些选项是灰色的无法修改怎么办答说明被其他选项依赖按?查看帮助找到依赖项并先启用。28.depends on和select的区别答depends on表示依赖条件select表示当前选项会强制启用另一个选项。29. 在TinaSDK中如何永久保存内核配置修改非临时答使用make menuconfig而不是make kernel_menuconfig通过Tina的Kernel modules菜单选择。六、Tina-SDK 开发环境与内核编译30. TinaSDK 中内核源码位置如何快速跳转答lichee/linux-5.4快捷命令ckernel。31. 板级设备树和配置文件路径在哪如何快速跳转答device/config/chips/t113/configs/100ask/快捷命令ccconfigs。32. 单独编译内核的命令是什么答mkernel需先source build/envsetup.sh和lunch。33. 编译内核后如何打包生成烧录镜像答pack。34. TinaSDK 最终镜像文件名及路径答out/t113-100ask/tina_t113-100ask_uart3.img。七、内核启动与调试35. 如何查看内核启动时传递的命令行参数答cat /proc/cmdline。36.loglevel8内核参数作用答将所有内核消息打印到控制台最高日志级别。37.rootwait内核参数干嘛用的答无限等待根设备出现常用于SD卡或USB设备启动。38. 如何修改内核打印等级降低输出冗余答修改CONFIG_MESSAGE_LOGLEVEL_DEFAULT为较小值如4或在内核命令行加loglevel4。39. 启动后系统反复重启没有登录提示如何排查答检查串口输出看是否 kernel panic用panic0参数阻止自动重启读最后一条错误。八、驱动添加实战LCD触摸屏40. 为I2C触摸屏添加驱动的主要步骤是什么答看原理图确定引脚和总线修改设备树添加I2C节点和触摸子节点配置内核模块编译烧录测试。41. 设备树中ctp_int_port和ctp_wakeup属性作用答指定触摸屏的中断引脚和复位引脚用于上报触摸事件和复位芯片。42. 触摸驱动加载成功后如何查看对应的输入设备节点答cat /proc/bus/input/devices找到 Name 为触摸屏的设备查看 Handlers。43. 触摸屏不工作如何初步测试I2C通信是否正常答使用i2cdetect -y bus扫描设备地址确认设备是否应答。九、驱动添加实战用户按键44.gpio-keys驱动的作用设备树中如何描述一个按键答将GPIO按键抽象为输入设备。需在根节点下创建gpio-keys子节点每个按键用单独节点指定gpios、linux,code、label等。45.linux,code 114;中 114 代表什么答KEY_VOLUMEDOWN键值定义在include/uapi/linux/input-event-codes.h。46. 按键驱动加载后如何测试按键上报数据答cat /dev/input/eventX会有乱码或hexdump /dev/input/eventX查看十六进制数据。47. 为什么按键驱动手动insmod有效但重启后消失如何开机自动加载答因为模块未配置为自动加载。解决方法在/etc/init.d/rc.modules中添加insmod命令。十、Git与内核代码追溯48. 如何在内核源码仓库中搜索包含某个关键词如imx6ull的提交答git log --grepimx6ull --oneline。49. 拿到一个commit id如何查看它的完整修改内容答git log -p -1 commit-id或git show commit-id。十一、综合与进阶50. 在TinaSDK中修改设备树后是否需要单独编译设备树如何生效答设备树不能单独编译必须执行make或mkernel然后pack重新烧录整个镜像。51. 如何判断一个内核驱动是编译进内核还是编译为模块答查看.config中对应选项y内建m模块未定义或n排除。52.make distclean会删除哪些文件答删除所有编译产物、.config以及编辑器备份文件。相当于回到原始源码状态。53. 调试驱动时频繁修改设备树最快验证的方法是什么答在U-Boot中用fdt set临时修改内存中的设备树然后boot启动测试不烧录镜像。54. 如何查看开发板上所有的输入设备及其对应的event节点答cat /proc/bus/input/devices然后找Handlers字段。55. 开发板上电后一直卡在 U-Boot 倒计时即使按任意键也无法进入命令行答可能是串口接收问题检查串口线、波特率、流控或 bootdelay0需断电重试。补充必考题共8题56. CISC 和 RISC 的主要区别是什么嵌入式领域为什么普遍使用 RISC答CISC指令复杂、变长一条指令可完成多步操作RISC指令精简、定长采用加载/存储架构。RISC硬件简单、功耗低、面积小适合嵌入式。57. ARM Cortex-A、Cortex-R、Cortex-M 三大系列分别用于什么场景答A系列应用处理器跑Linux/AndroidR系列实时处理器汽车、硬盘控制器M系列微控制器单片机、RTOS。58. 开源软件许可证中GPL 和 LGPL 有什么区别商业闭源产品应优先选择哪种答GPL具有“传染性”链接GPL库的代码也须开源LGPL允许动态链接而不开源闭源应用程序。商业产品优先选择MIT、BSD、Apache或LGPL动态链接。59. Autotools 构建系统的典型配置编译命令是什么如何指定交叉编译工具链和安装路径答./configure --hostarm-linux-gnueabihf --prefix/usrmakemake install DESTDIR/path/to/rootfs。60. CMake 交叉编译时如何在CMakeLists.txt中指定交叉编译器需要注意什么顺序答set(CMAKE_C_COMPILER /path/to/arm-gcc)必须放在project(...)之前。61. 交叉编译时为什么要设置CFLAGS-Ipath和LDFLAGS-Lpath答告诉编译器和链接器去构建空间的目录中找头文件和库而非主机系统的/usr/include和/usr/lib。62. 设备树中pinctrl-0、pinctrl-1和pinctrl-names属性的作用是什么答pinctrl-names定义状态名如default,sleeppinctrl-0/-1分别对应各状态的引脚配置用于运行时切换。63. 如何查看当前系统中某个已加载内核模块的参数值例如usb-storage的delay_use答cat /sys/module/usb_storage/parameters/delay_use模块名中的短横线变下划线。学习建议对着以上55个题目逐条自问是否能清晰回答。若某个题目卡住就回到对应博客章节再学习。反复三遍你就能应对领导任何技术考核。祝你顺利