【发布时间】:2016-02-15 16:45:31
【问题描述】:
现在,我正在使用printk 进行编译,将生成的内核复制到 U 盘,将 U 盘安装到设备上,安装包含内核的分区,从 U 盘复制新内核到分区rebooting,然后通过将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
开发应该这么痛苦吗?我不明白如何开发任何有意义的非平凡内核代码。
【问题讨论】:
-
不,它不应该那么痛苦。首先,值得花时间从嵌入式设备获取串行端口连接回开发主机,并在其上获取控制台消息。然后你真的想找到一种方法 - tftp、一些供应商唯一的 USB 引导加载程序、像 U-Boot 这样的引导加载程序的附加组件等,以更有效地将你的新构建加载到目标上。
-
您总是可以尝试使用像 QEMU 这样的虚拟机或模拟器(如果您的嵌入式平台存在的话)。
-
我曾经创建了一个安装在设备上的最小工作内核,其唯一目的是通过 USB 加载新内核并执行它。加载新内核就像重新启动设备并通过 USB 加载新内核一样简单。非常容易自动化。如果你不能弄乱引导加载程序或有一个可以使用的模拟器,你可能想尝试一下。
-
看一下u-boot的
fastboot模式。这是我在日常工作中使用的。搭配adb(或只是将命令写入串行控制台)可以让您完全自动化整个刷机过程。
标签: linux debugging linux-kernel embedded