如何使用嵌入式设备在内核上工作?
How to work on kernel with an embedded device?
现在,我正在使用 printk
进行编译,将生成的内核复制到 U 盘,将 U 盘安装到设备上,安装包含内核的分区,复制新内核从 U 盘到分区,reboot
ing,然后通过将 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
开发就这么痛苦吗?我不明白任何有意义的重要内核代码是如何开发出来的。
最佳工作流程将取决于您使用的设备的功能。他们通常会有一个引导加载程序,其中包含从网络或串行端口引导的选项。
我也在做一些嵌入式开发,这就是我的想法。我正在使用的设备有一些内置闪存,默认情况下它是从中启动的,但也有一个 USB 端口和一个 SD 卡插槽。它有一个相当原始的引导加载程序。
在 USB 端口上,我连接了一个 wifi dongle。我确保使用所需的模块编译内核以启动 USB 加密狗和 运行.
我构建了一个最小的内核和根文件系统,并已将其闪存到设备上。该内核启用了 CONFIG_KEXEC
选项。根文件系统有 kexec 工具。我使用 buildroot.
构建系统
本系统启动时,会尝试挂载SD卡,并检查是否能在根目录下找到内核。如果可以,则它使用 kexec 来引导第二个内核。这是使用我编写的自定义初始化脚本完成的。
如果您的设备上没有 SD 卡插槽,您可能可以使用 USB 记忆棒执行类似的操作。
通过这个设置,我可以只使用 sftp 将新内核映像传输到 sdcard 上,然后使用 kexec 启动它。省去了每次换内核都要重新刷机的麻烦
现在,我正在使用 printk
进行编译,将生成的内核复制到 U 盘,将 U 盘安装到设备上,安装包含内核的分区,复制新内核从 U 盘到分区,reboot
ing,然后通过将 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
开发就这么痛苦吗?我不明白任何有意义的重要内核代码是如何开发出来的。
最佳工作流程将取决于您使用的设备的功能。他们通常会有一个引导加载程序,其中包含从网络或串行端口引导的选项。
我也在做一些嵌入式开发,这就是我的想法。我正在使用的设备有一些内置闪存,默认情况下它是从中启动的,但也有一个 USB 端口和一个 SD 卡插槽。它有一个相当原始的引导加载程序。
在 USB 端口上,我连接了一个 wifi dongle。我确保使用所需的模块编译内核以启动 USB 加密狗和 运行.
我构建了一个最小的内核和根文件系统,并已将其闪存到设备上。该内核启用了
CONFIG_KEXEC
选项。根文件系统有 kexec 工具。我使用 buildroot. 构建系统
本系统启动时,会尝试挂载SD卡,并检查是否能在根目录下找到内核。如果可以,则它使用 kexec 来引导第二个内核。这是使用我编写的自定义初始化脚本完成的。
如果您的设备上没有 SD 卡插槽,您可能可以使用 USB 记忆棒执行类似的操作。
通过这个设置,我可以只使用 sftp 将新内核映像传输到 sdcard 上,然后使用 kexec 启动它。省去了每次换内核都要重新刷机的麻烦