Skip navigation.
The QNX Community Portal

View topic - OS Image size limit for x86

OS Image size limit for x86

Discussion about the QNX6 OS.

OS Image size limit for x86

Postby john52 » Tue Sep 27, 2011 6:23 am


There is a note at foundry27 page ( ... leasenotes) :

There is an undocumented limitation on the size of the OS image that can be properly loaded on x86 systems (ref. PR#45838). Ensure that OS images generated do not exceed 3M (uncompressed) in size.

Does this statement fair for all x86 systems? If yes? what is the reason?

For example, i have an image (.ifs file). Its size is about 2.3 MB with [compress=3] and 5 MB uncompressed.
If I boot from compressed image - system boots and works fine.
If I boot from UNcompressed image - system boots and there are error messages about devb-* drivers. There are no any other errors.

If there is a real size limitation of 3 MB uncompressed for OS image, why does my image works fine? Or maybe I just don't see problems?
New Member
Posts: 3
Joined: Tue Sep 27, 2011 6:02 am

Re: OS Image size limit for x86

Postby denkelly » Tue Sep 27, 2011 1:39 pm

If you look at usr/include/sys/startup.h, you will see a block diagram for "Linear ROM XIP". This has some application to the X86 disk boot process as well.

The "ROM" block in the diagram represents the binary "ifs" file you build, although 0x440 bytes for bios.boot will precede the startup header. Your ifs file is loaded by the boot process "as is" at address 0x110000 - THIS ORIGIN IS FIXED IN THE BOOTSTRAP!

The "RAM" block in the diagram is "built" by the startup code - it copies startup (and the microkernel) from the ifs image to a HIGHER address in RAM where it will begin executing. Note it "may" have to UNCOMPRESS the original image to RAM location where it must be ready-to-run.

startup_header.ram_paddr is the destination of the memory copy. (startup_header.image_paddr is the "relocated" address of the image - normally it matches ram_paddr.) The default RAM address is 0x400000. THIS SETS THE MAXIMUM SIZE for a BIOS-booted, x86 ifs file at 0x400000 - 0x110000 or 3.9375M. (Other boot methods and processors have other limits but approx 3M is maintained.)

To boot a larger .ifs file you must get mkifs to locate "ram_paddr" (and "image_paddr") to a higher address. In the IDE System Builder, you can change the global property named "Image Address" to the desired location. You don't want to set it unnecessarily high since the region reserved for the original image is likely excluded from use by the running system.
Senior Member
Posts: 160
Joined: Sat Aug 02, 2008 3:27 pm

Return to QNX6 - OS

Who is online

Users browsing this forum: No registered users and 2 guests