Qemu+busybox for kernel development
I am trying to setup a build environment where I can run the kernel and see how the changes I have made to the kernel source work. My understanding, based on googling, is that it is common practice in the kernel community to use a virtualised environment for that purpose. What I have done so far is create a ramfs that is built into the kernel, as described here [1] and here [2]. [1] https://landley.net/writing/rootfs-howto.html [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Doc... a). I have generated a minimal initramfs_list file: scripts/gen_initramfs_list.sh -d >usr/initramfs_list Which looks like this: # This is a very simple, default initramfs dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 slink /bin/sh busybox 777 0 0 file /init /bin/busybox 755 0 0 b). Set CONFIG_INITRAMFS_SOURCE: CONFIG_INITRAMFS_SOURCE="/home/sasha/linux/usr/initramfs_list" c). And had the kernel generate the initramfs image: make ... GEN usr/initramfs_data.cpio.gz CHK include/generated/compile.h AS usr/initramfs_data.o LD usr/built-in.o ... When I run the kernel in qemu I get an error message which complains about /etc/init.d/rcS missing. The posts online seem to suggest that this has got to do with the busybox configuration. So far, I have not been able to get my head around this problem. Any points or suggestions would be much appreciated. Alexander Kapshuk.
The way I do it is by compiling the kernel as I would normaly do for a real system. Then, after copying vmlinuz and generating my initramfs, I run Qemu: $ qemu-system-x86_64 -kernel vmlinuz -initrd initramfs.img -append param1=value1 For me, as I am mostly testing, there is no need for a full-feature root FS, since initramfs is perfect for containing small test application and loadable kernel modules. This might come in hand, though: https://lwn.net/Articles/660404/ On 06/28/2017 05:46 AM, Alexander Kapshuk wrote:
I am trying to setup a build environment where I can run the kernel and see how the changes I have made to the kernel source work. My understanding, based on googling, is that it is common practice in the kernel community to use a virtualised environment for that purpose. What I have done so far is create a ramfs that is built into the kernel, as described here [1] and here [2].
[1] https://landley.net/writing/rootfs-howto.html [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Doc...
a). I have generated a minimal initramfs_list file: scripts/gen_initramfs_list.sh -d >usr/initramfs_list Which looks like this: # This is a very simple, default initramfs
dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 slink /bin/sh busybox 777 0 0 file /init /bin/busybox 755 0 0
b). Set CONFIG_INITRAMFS_SOURCE: CONFIG_INITRAMFS_SOURCE="/home/sasha/linux/usr/initramfs_list"
c). And had the kernel generate the initramfs image: make ... GEN usr/initramfs_data.cpio.gz CHK include/generated/compile.h AS usr/initramfs_data.o LD usr/built-in.o ...
When I run the kernel in qemu I get an error message which complains about /etc/init.d/rcS missing. The posts online seem to suggest that this has got to do with the busybox configuration. So far, I have not been able to get my head around this problem. Any points or suggestions would be much appreciated.
Alexander Kapshuk.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- - seds ~> https://seds.nl
Hi Alexander, On Wed, Jun 28, 2017 at 1:46 PM, Alexander Kapshuk < alexander.kapshuk@gmail.com> wrote:
I am trying to setup a build environment where I can run the kernel and see how the changes I have made to the kernel source work. My understanding, based on googling, is that it is common practice in the kernel community to use a virtualised environment for that purpose. What I have done so far is create a ramfs that is built into the kernel, as described here [1] and here [2].
[1] https://landley.net/writing/rootfs-howto.html [2] https://git.kernel.org/pub/scm/linux/kernel/git/ torvalds/linux.git/plain/Documentation/early-userspace/README?h=v4.12-rc7
a). I have generated a minimal initramfs_list file: scripts/gen_initramfs_list.sh -d >usr/initramfs_list Which looks like this: # This is a very simple, default initramfs
dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 slink /bin/sh busybox 777 0 0 file /init /bin/busybox 755 0 0
b). Set CONFIG_INITRAMFS_SOURCE: CONFIG_INITRAMFS_SOURCE="/home/sasha/linux/usr/initramfs_list"
c). And had the kernel generate the initramfs image: make ... GEN usr/initramfs_data.cpio.gz CHK include/generated/compile.h AS usr/initramfs_data.o LD usr/built-in.o ...
When I run the kernel in qemu I get an error message which complains about /etc/init.d/rcS missing.
Did you check initramfs for rc.S script? The kernel configuration, busybox configuration and the layout of initramfs (which should be /home/sasha/linux/usr/initramfs_list) should be consistent. If the kernel is asking for it then it is not consistent.
The posts online seem to suggest that this has got to do with the busybox configuration. So far, I have not been able to get my head around this problem. Any points or suggestions would be much appreciated.
Alexander Kapshuk.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Thank you. Shahbaz Khan
On Wed, Jun 28, 2017 at 10:48 PM, Shahbaz khan <shazalive@gmail.com> wrote:
Hi Alexander,
On Wed, Jun 28, 2017 at 1:46 PM, Alexander Kapshuk <alexander.kapshuk@gmail.com> wrote:
I am trying to setup a build environment where I can run the kernel and see how the changes I have made to the kernel source work. My understanding, based on googling, is that it is common practice in the kernel community to use a virtualised environment for that purpose. What I have done so far is create a ramfs that is built into the kernel, as described here [1] and here [2].
[1] https://landley.net/writing/rootfs-howto.html [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Doc...
a). I have generated a minimal initramfs_list file: scripts/gen_initramfs_list.sh -d >usr/initramfs_list Which looks like this: # This is a very simple, default initramfs
dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 slink /bin/sh busybox 777 0 0 file /init /bin/busybox 755 0 0
b). Set CONFIG_INITRAMFS_SOURCE: CONFIG_INITRAMFS_SOURCE="/home/sasha/linux/usr/initramfs_list"
c). And had the kernel generate the initramfs image: make ... GEN usr/initramfs_data.cpio.gz CHK include/generated/compile.h AS usr/initramfs_data.o LD usr/built-in.o ...
When I run the kernel in qemu I get an error message which complains about /etc/init.d/rcS missing.
Did you check initramfs for rc.S script?
The kernel configuration, busybox configuration and the layout of initramfs (which should be /home/sasha/linux/usr/initramfs_list) should be consistent. If the kernel is asking for it then it is not consistent.
The posts online seem to suggest that this has got to do with the busybox configuration. So far, I have not been able to get my head around this problem. Any points or suggestions would be much appreciated.
Alexander Kapshuk.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Thank you. Shahbaz Khan
Apologies for the delay in replying. Thanks very much for all of your responses. I'll give them all a try.
On Wed, Jun 28, 2017 at 5:46 PM, Alexander Kapshuk <alexander.kapshuk@gmail.com> wrote:
I am trying to setup a build environment where I can run the kernel and see how the changes I have made to the kernel source work. My understanding, based on googling, is that it is common practice in the kernel community to use a virtualised environment for that purpose. What I have done so far is create a ramfs that is built into the kernel, as described here [1] and here [2].
[1] https://landley.net/writing/rootfs-howto.html [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Doc...
a). I have generated a minimal initramfs_list file: scripts/gen_initramfs_list.sh -d >usr/initramfs_list Which looks like this: # This is a very simple, default initramfs
dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 slink /bin/sh busybox 777 0 0 file /init /bin/busybox 755 0 0
b). Set CONFIG_INITRAMFS_SOURCE: CONFIG_INITRAMFS_SOURCE="/home/sasha/linux/usr/initramfs_list"
c). And had the kernel generate the initramfs image: make ... GEN usr/initramfs_data.cpio.gz CHK include/generated/compile.h AS usr/initramfs_data.o LD usr/built-in.o ...
When I run the kernel in qemu I get an error message which complains about /etc/init.d/rcS missing. The posts online seem to suggest that this has got to do with the busybox configuration. So far, I have not been able to get my head around this problem. Any points or suggestions would be much appreciated.
We are using this in Gentoo for testing the kernel: https://github.com/gentoo/Gentoo_kernelCI This is how we are calling Qemu: https://github.com/gentoo/Gentoo_kernelCI/blob/master/files/qemu_check.py#L5... -- Thanks, Alice Ferrazzi Gentoo Kernel Project Leader Mail: Alice Ferrazzi <alice.ferrazzi@gmail.com> PGP: 2E4E 0856 461C 0585 1336 F496 5621 A6B2 8638 781A
participants (4)
-
Alexander Kapshuk -
Alice Ferrazzi -
Ben Mezger -
Shahbaz khan