我想在Qemu上开发Linux内核开发。我想修改一些内核文件作为我的项目的一部分。我只能在网上找到linux发行版的ISO文件,我认为我们不能编辑。任何人都可以请指出我在这个正确的方向?使用Qemu进行Linux内核开发?
回答
从kernel.org下载Linux内核源代码,然后修改,配置和构建你的内核。在建立之后,你会得到一个通常位于arch/x86/boot/bzImage的内核映像(如果你的arch是x86的话,看看arch的适当位置),这就是你在Qemu上测试你修改的内核所需要的。你还需要一个rootfs(使用busybox)来正确运行它。使用qemu的'-kernel'参数来传递bzImage。举例:
`qemu-system-x86_64 -m 1024 -smp 4 -kernel arch/x86/boot/bzImage -initrd initramfs.gz -append "rdinit=/ root=/dev/ram`
它告诉qemu使用1024内存,使用4个CPU。
如果你想修改linux内核,你可以从https://www.kernel.org/下载内核源码。修改代码后在Linux系统上安装。
嗨感谢您的回答,但我感兴趣的内核离线更改然后在qemu上运行修改后的版本,然后我想看看这些修改是否反映在Qemu中。但是在我通过Qemu运行内核之后,它只是加载内核,我无法进一步做任何事情。如果您需要更多信息,请告诉我。 –
请不要在SO中使用签名和标语(http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed)。 – KBart
我推荐的最好方法就是给你ubuntu-vm-builder。
sudo ubuntu-vm-builder qemu precise --arch 'amd64' --mem '1024' --rootsize '4096' --swapsize '1024' --kernel-flavour 'generic' --hostname 'ubuntu' --components 'main' --name 'Srikanth' --user 'ubuntu' --pass 'ubuntu' --bridge 'br0' --libvirt 'qemu:///system'
然后在qemu中运行它。
这将构建一个qcow2文件,该文件在写入时复制,并且比从源码获取内核并编译它快。
Buildroot里面抢救
Buildroot是一组脚本生成与根文件系统映像比10MiB小微小的发行版。
它从源代码下载所有内容并编译它,因此修补软件包是微不足道的。没有与BR2_GLOBAL_PATCH_DIR
https://buildroot.org/downloads/manual/manual.html#customize-patches
支持的修补机制生成的图像是如此的渺小,变得可以理解了整个用户空间的设置,这将使其更容易专注于内核。
我创造了这个设置来自动东西尽可能:https://github.com/cirosantilli/linux-kernel-module-cheat
这种设置也为ARM的伟大工程:How to use QEMU for learning ARM Linux kernel development?
- 1. 使用linux进行Android内核开发
- 2. 使用KVM进行Linux内核开发
- 3. qemu中的x86 linux内核开发
- 4. 使用Qemu进行内核模拟
- 5. linux内核开发
- 6. LINUX VS BSD内核开发
- 7. 在qemu中启动ppc linux内核
- 8. 使用qemu for i386 linux内核的地址空间标识符
- 9. 如何使用GDB和QEMU调试Linux内核?
- 10. 如何调试Linux内核使用GDB的QEMU环境
- 11. 无法在qemu上运行linux内核映像
- 12. 如何开始使用Linux内核开发
- 13. 无法使用QEMU/GDB调试内核
- 14. 在Python中开发Linux内核模块
- 15. Linux内核开发首选编辑器
- 16. Debian,make-kpkg和Linux内核开发
- 17. 设置Netbeans/Eclipse的Linux内核开发
- 18. 针对linux内核开发的发行版
- 19. Linux内核函数和内核模块开发
- 20. 其他内核的Linux内核模块开发编译
- 21. 如何从其他linux机器上使用macbook存储空间进行linux内核开发?
- 22. TASK_UNINTERRUPTIBLE和在Linux内核开发中使用C处理线程
- 23. 使用“int 0x80”进行Linux内核系统调用
- 24. 内核开发
- 25. Linux内核进程管理
- 26. linux内核进程簿
- 27. 选择Linux进行开源开发
- 28. 在Linux内核中使用AES进行加密和解密
- 29. get_user_pages()linux内核使用virt_to_page()
- 30. 如何知道发行版使用的Linux内核版本?
嗨!非常感谢答案。我试图按照以下链接中的步骤在我的系统上安装忙碌框:[link](http://blog-junstrix.rhcloud.com/2013/01/23/compiling-linux-kernel-and-running-on -qemu /)但我得到这个错误'mount:mount point rootfs is not a directory'当我试图运行这个命令'sudo mount -o loop ramdisk.img rootfs'时。请让我知道如何继续? –
这是一个不同的东西,并在该教程显示如何作为init的一部分运行程序。你不一定需要在某个目录下挂载rootfs,如果你使用busybox,你会从那里得到_install目录,你可以创建rootfs。 –
Hi rakib!非常感谢!有效! :) –