如何使用嵌入式设备处理内核?

时间:2015-11-14 00:54:07

标签: linux debugging linux-kernel embedded

现在,我正在使用printk进行编译,将生成的内核复制到USB记忆棒,将USB记忆棒挂在设备上,安装包含内核的分区,复制新的内核从USB棒到分区reboot,然后通过捕获dmesg输出到文件来检查跟踪。

在工作站上:

make my-kernel
cp new_kernel /path/to/usb/stick

在嵌入式设备上:

mount /dev/sda1/ /mnt
mount kernelpartition /tmp/kernel
cp /mnt/new_kernel /tmp/kernel
sync
umount /tmp/kernel
umount /dev/sda1
reboot

dmesg > mytrace
less mytrace

这种痛苦应该发展吗?我不明白如何开发出任何有意义的非平凡内核代码。

1 个答案:

答案 0 :(得分:4)

最佳工作流程取决于您使用的设备的功能。通常他们会有一个引导加载程序,可以选择从网络或串行端口启动。

我也正在做一些嵌入式开发,这就是我想出的。我正在使用的设备有一些内置闪存,默认情况下它启动,但也有一个USB端口和一个SD卡插槽。它有一个相当原始的引导程序。

  • 在USB端口上我连接了一个wifi加密狗。我确保使用所需的模块编译内核以启动并运行USB加密狗。

  • 我已经构建了一个最小的内核和根文件系统,我已经将其闪存到设备上。此内核启用了选项CONFIG_KEXEC。根文件系统有kexec工具。我使用buildroot构建系统。

  • 当此系统启动时,它会尝试挂载SDCARD并检查它是否可以在根目录中找到内核。如果可以,那么它使用kexec来启动第二个内核。这是使用我编写的自定义init脚本完成的。

如果您的设备上没有SD卡插槽,则可以使用USB记忆棒执行类似操作。

通过这种设置,我可以使用sftp将新的内核映像传输到SD卡上,并使用kexec来启动它。每次更换内核时,它都可以省去重新刷新设备的麻烦。