diff mbox

[U-Boot,v3,8/8] x86: qemu: add documentaion for the fw_cfg interface

Message ID 1451385354-55472-9-git-send-email-yanmiaobest@gmail.com
State Superseded
Delegated to: Bin Meng
Headers show

Commit Message

Miao Yan Dec. 29, 2015, 10:35 a.m. UTC
Document the usage of 'fw' command

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
Changes in v2:
  - various cleanup

 doc/README.x86 | 36 +++++++++++++++++++++++++++++++++---
 1 file changed, 33 insertions(+), 3 deletions(-)

Comments

Bin Meng Dec. 30, 2015, 4:04 a.m. UTC | #1
Hi Miao,

On Tue, Dec 29, 2015 at 6:35 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Document the usage of 'fw' command
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
> Changes in v2:
>   - various cleanup
>
>  doc/README.x86 | 36 +++++++++++++++++++++++++++++++++---
>  1 file changed, 33 insertions(+), 3 deletions(-)
>
> diff --git a/doc/README.x86 b/doc/README.x86
> index 1271e5e..0687dc1 100644
> --- a/doc/README.x86
> +++ b/doc/README.x86
> @@ -295,9 +295,39 @@ show QEMU's VGA console window. Note this will disable QEMU's serial output.
>  If you want to check both consoles, use '-serial stdio'.
>
>  Multicore is also supported by QEMU via '-smp n' where n is the number of cores
> -to instantiate. Currently the default U-Boot built for QEMU supports 2 cores.
> -In order to support more cores, you need add additional cpu nodes in the device
> -tree and change CONFIG_MAX_CPUS accordingly.
> +to instantiate. U-Boot uses fw_cfg interface provided by QEMU to detect certain
> +system information, such as cpu number, so 'n' can be any number allowed by
> +QEMU.
> +
> +The fw_cfg interface in QEMU also provides information about kernel data, initrd
> +,command-line arguments and more. U-Boot supports directly accessing these informtion
> +from fw_cfg interface, this saves the time of loading them from hard disk or
> +network again, through emulated devices. To use it , simply providing them in
> +QEMU command line:
> +
> +$ qemu-system-i386 -nographic -bios path/to/u-boot.rom -m 1024 -kernel /path/to/bzImage
> +    -append 'root=/dev/sda1 console=ttyS0' -initrd /path/to/initrd -smp 8
> +
> +Note: -initrd and -smp are both optional
> +
> +Then start QEMU, in U-Boot command line use the following U-Boot command to setup kernel:
> +
> + => fw
> +fw - QEMU firmware interface
> +
> +Usage:
> +fw <command>
> +    - list        : print firmware(s) currently loaded
> +    - cpus        : print online cpu number
> +    - load <addr> : load kernel (if any) to address <addr>
> +
> +=> fw load
> +loading kernel to address 01000000, initrd 015dd010
> +
> +Here the kernel (bzImage) is loaded to 01000000 and initrd is to 0x15dd010. Then, 'zboot'
> +can be used to boot the kernel:
> +
> +=> zboot 01000000 - 015dd010

This still does not work. The last parameter (initrd_size) should not
be omitted. Please enhance the 'fw load' command to print out the
initrd size.

Did you test the initrd? Kernel does not boot with initird, showing

[    3.092767] Unpacking initramfs...
[    3.094766] Initramfs unpacking failed: junk in compressed archive

>
>  CPU Microcode
>  -------------
> --

Regards,
Bin
Miao Yan Dec. 30, 2015, 8:50 a.m. UTC | #2
Hi Bin,

2015-12-30 12:04 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
> Hi Miao,
>
> On Tue, Dec 29, 2015 at 6:35 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>> Document the usage of 'fw' command
>>
>> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
>> ---
>> Changes in v2:
>>   - various cleanup
>>
>>  doc/README.x86 | 36 +++++++++++++++++++++++++++++++++---
>>  1 file changed, 33 insertions(+), 3 deletions(-)
>>
>> diff --git a/doc/README.x86 b/doc/README.x86
>> index 1271e5e..0687dc1 100644
>> --- a/doc/README.x86
>> +++ b/doc/README.x86
>> @@ -295,9 +295,39 @@ show QEMU's VGA console window. Note this will disable QEMU's serial output.
>>  If you want to check both consoles, use '-serial stdio'.
>>
>>  Multicore is also supported by QEMU via '-smp n' where n is the number of cores
>> -to instantiate. Currently the default U-Boot built for QEMU supports 2 cores.
>> -In order to support more cores, you need add additional cpu nodes in the device
>> -tree and change CONFIG_MAX_CPUS accordingly.
>> +to instantiate. U-Boot uses fw_cfg interface provided by QEMU to detect certain
>> +system information, such as cpu number, so 'n' can be any number allowed by
>> +QEMU.
>> +
>> +The fw_cfg interface in QEMU also provides information about kernel data, initrd
>> +,command-line arguments and more. U-Boot supports directly accessing these informtion
>> +from fw_cfg interface, this saves the time of loading them from hard disk or
>> +network again, through emulated devices. To use it , simply providing them in
>> +QEMU command line:
>> +
>> +$ qemu-system-i386 -nographic -bios path/to/u-boot.rom -m 1024 -kernel /path/to/bzImage
>> +    -append 'root=/dev/sda1 console=ttyS0' -initrd /path/to/initrd -smp 8
>> +
>> +Note: -initrd and -smp are both optional
>> +
>> +Then start QEMU, in U-Boot command line use the following U-Boot command to setup kernel:
>> +
>> + => fw
>> +fw - QEMU firmware interface
>> +
>> +Usage:
>> +fw <command>
>> +    - list        : print firmware(s) currently loaded
>> +    - cpus        : print online cpu number
>> +    - load <addr> : load kernel (if any) to address <addr>
>> +
>> +=> fw load
>> +loading kernel to address 01000000, initrd 015dd010
>> +
>> +Here the kernel (bzImage) is loaded to 01000000 and initrd is to 0x15dd010. Then, 'zboot'
>> +can be used to boot the kernel:
>> +
>> +=> zboot 01000000 - 015dd010
>
> This still does not work. The last parameter (initrd_size) should not
> be omitted. Please enhance the 'fw load' command to print out the
> initrd size.

OK.

>
> Did you test the initrd? Kernel does not boot with initird, showing
>
> [    3.092767] Unpacking initramfs...
> [    3.094766] Initramfs unpacking failed: junk in compressed archive


Seems the default load address is overwritten during the process, which
somehow impacts initramfs.

I will change that to 02000000 by default, and also initrd_start needs
to be page size aligned. I'll fix that too.


>
>>
>>  CPU Microcode
>>  -------------
>> --
>
> Regards,
> Bin
diff mbox

Patch

diff --git a/doc/README.x86 b/doc/README.x86
index 1271e5e..0687dc1 100644
--- a/doc/README.x86
+++ b/doc/README.x86
@@ -295,9 +295,39 @@  show QEMU's VGA console window. Note this will disable QEMU's serial output.
 If you want to check both consoles, use '-serial stdio'.
 
 Multicore is also supported by QEMU via '-smp n' where n is the number of cores
-to instantiate. Currently the default U-Boot built for QEMU supports 2 cores.
-In order to support more cores, you need add additional cpu nodes in the device
-tree and change CONFIG_MAX_CPUS accordingly.
+to instantiate. U-Boot uses fw_cfg interface provided by QEMU to detect certain
+system information, such as cpu number, so 'n' can be any number allowed by
+QEMU.
+
+The fw_cfg interface in QEMU also provides information about kernel data, initrd
+,command-line arguments and more. U-Boot supports directly accessing these informtion
+from fw_cfg interface, this saves the time of loading them from hard disk or
+network again, through emulated devices. To use it , simply providing them in
+QEMU command line:
+
+$ qemu-system-i386 -nographic -bios path/to/u-boot.rom -m 1024 -kernel /path/to/bzImage
+    -append 'root=/dev/sda1 console=ttyS0' -initrd /path/to/initrd -smp 8
+
+Note: -initrd and -smp are both optional
+
+Then start QEMU, in U-Boot command line use the following U-Boot command to setup kernel:
+
+ => fw
+fw - QEMU firmware interface
+
+Usage:
+fw <command>
+    - list        : print firmware(s) currently loaded
+    - cpus        : print online cpu number
+    - load <addr> : load kernel (if any) to address <addr>
+
+=> fw load
+loading kernel to address 01000000, initrd 015dd010
+
+Here the kernel (bzImage) is loaded to 01000000 and initrd is to 0x15dd010. Then, 'zboot'
+can be used to boot the kernel:
+
+=> zboot 01000000 - 015dd010
 
 CPU Microcode
 -------------