osdir.com
mailing list archive

Subject: Creating Squashfs + lzma kernel modules - msg#00005

List: linux.redhat.fedora.livecd

Date: Prev Next Index Thread: Prev Next Index

Hello to anyone who is interested,

Building a kernel with squashfs with lzma support (July
2008)
By Sean Godsell

The first task on the list was a kernel that supported squashfs with lzma
support. So I decided to go with the latest stable kernel at this time. Which
is kernel 2.6.25.9 from kernel.org . Now each linux distribution has its way
of building kernels. So I opted to building the kernel the generic way. This
will also work for most distributions. And I get to control the patches that I
want to apply. Once you have obtained the kernel source code, and extracted to
a directory of your choice (I use /usr/src path). To extact I used the
following command
tar -jxf linux-2.6.25.9.tar.bz2

Next I downloaded a bunch of files from http://www.squashfs-lzma.org/ .
Download all the files in the section 'Download (all needed)', except the last
one which states linux kernel 2.6.24 or higher. For that one I already
downloaded the kernel 2.6.25.9 from http://www.kernel.org . Also download
http://sourceforge.net/tracker/download.php?group_id=63835&atid=505341&file_id=274755&aid=1912192
to fix squashfs for 2.6.25 kernels. Okay now for the fun stuff making the
kernel. I always like to comple the stock kernel and get it running first, so
I just take current kernel config file from the one I am running and use that
as my starting point. On some systems you can find the config in the /boot
directory. Some kernels might have enabled the config to be in
/proc/config.gz. I am going to use the /boot/config-xxxxxx files. On my
fedora system here I am going to copy one of the config files from /boot. In
my case specifically /boot/config-2.6.25.6-55.fc9.i686 and copy it to the
kernel source directory and rename it to .config .
cp /boot/config-2.6.25.6-55.fc9.i686 /usr/src/linux-2.6.25.9/.config

At this point I added some other patches to the kernel that are not related to
squashfs (like ndiswrapper which requests an 8k stack size instead). I also
added a few other drivers like r5u870, gspca, linux-uvc, and madwifi. None of
which effect squashfs.

Then I do a make menuconfig to add or remove items from the kernel. Once you
made the changes in make menuconfig . The next step is to build the kernel,
type in
make -j 2 bzImage

Notice the -j 2 is used for running 2 jobs at the same time. It helps speed up
the build if you have a dual core system. If you have a quad system then
change the 2 to 4. After type in:
make -j 2 modules
then
make -j 2 modules_install

If you don't want to wait for each step then type in the following:
make bzImage modules modules_install

Well some of you might want a leaner kernel with using the option -g0. This
will definitely take some time to build the kernel and the modules. Next I
built the other drivers (r5u870, gspca, uvc, ...)
If you get errors then you must have changed or did something wrong.
But if everything goes right then you should end up with a directory like
'/lib/modules/2.6.25.9' with all the modules. Next for my architecture I copy
the linux-2.6.25.9/arch/x86/boot/bzImage to /boot directory.
cp /usr/src/linux-2.6.25.9/arch/x86/boot/bzImage /boot/bzImage-2.6.25.9


The next step is to create an initrd to go with our new kernel. I use the
following command to create my initrd.
mkinitrd --with=ehci_hcd --with=ohci_hcd --with=uhci_hcd --with=mbcache
--with=jbd --with=ext3 --with=dm_mod --with=dm_mirror --with=dm_zero
--with=dm_snapshot --with=crypto_blkcipher --with=dm_crypt --with=aes_generic
--with=aes_i586 --with=cbc --with=sha256_generic --with=scsi_mod --with=sd_mod
--with=libata --with=ahci --with=sg /boot/initrd-2.6.25.9.img 2.6.25.9

This will create a file called initrd-2.6.25.9.img in the /boot folder.
If you don't know what modules to put into the initrd. Then what I do is look
at the current system and see what it has currently loaded. Use the command
lsmod. The last entries in the list are the first one's that get loaded at
boot time. So I just include those ones (if you don't have and encrypted
filesystem then you won't need crypto_blkcipher, as well as a few others).
Now the last step before we test our kernel is to update the boot
loader. In this case I update my /boot/grub/grub file with the following lines:

title MyBuild (2.6.25.9)
root (hd0,1)
kernel /bzImage-2.6.25.9 ro root=/dev/VolGroup01/LogVol00 rhgb
initrd /initrd-2.6.25.9.img

If you don't want to see a lot of information being displayed on bootup, then
add the word quiet to the end of the kernel line. Next reboot.
reboot

If it boots up, you are in luck ;-) Now to move on with adding the
squashfs + lzma support in the kernel.



Adding Squashfs + lzma support

Okay the first step is to take the squashfs files that were download
and put them in a directory. I put mine in /usr/src/squashfs , (I am going to
assume that you are going to be in the directory /usr/src/squashfs) so I have 5
files in this directory:
squashfs3.3.tar.gz
lzma457.tar.bz2
sqlzma3.3-457-2.tar.bz2
squashfs-3.3-cvsfix.tar.gz
squashfs-patch-2.6.25

The first one I expaned was squashfs3.3.tar.gz using the following command:
tar -zxf squashfs3.3.tar.gz

which will create a directory called squashfs3.3 inside the /usr/src/squashfs
folder. Next I created a directory called lzma457 inside /usr/src/squashfs.
Then I extracted the files from lzma457.tar.bz2 into the newly created folder
called lzma457 using the following command:
tar -C lzma457 -jxf lzma457.tar.bz2

Next I created a directory called patches inside the /usr/src/squashfs folder.
Then I extracted the file squashfs-3.3-cvsfix.tar.gz into the patches directory
using the following command:
tar -C patches -zxf squashfs-3.3-cvsfix.tar.gz

The last file to extract, I just extracted to /usr/src/squashfs, using the
following command:
tar -jxf sqlzma3.3-457-2.tar.bz2

Next I went inside the linux kernel (2.6.25.9).
cd /usr/src/linux-2.6.25.9
(for fedora do)
cd /usr/src/kernels/2.6.25.9-76.fc9.i686

and added the squashfs patch using the following command:
patch -p1 <
/usr/src/squashfs/squashfs3.3/kernel-patches/linux-2.6.24/squashfs3.3-patch
then
patch -p1 < /usr/src/squashfs/patches/typo_mkflags_k.patch
then
patch -p1 < /usr/src/squashfs/sqlzma2k-3.3.patch
then
patch -p1 < /usr/src/squashfs/squashfs-patch-2.6.25

The last patch you will get 2 fails but don't worry about them. If you are
really concerned with them then you can look at the reject file
'fs/squashfs/inode.c.rej'. You will see that it is only two trivial things a
printk and a module description.

After do a make menuconfig or edit the .config yourself and make sure
CONFIG_SQUASHFS=m . The option to set under menuconfig is under file
systems->Miscellaneous filesystems->SquashFS 3.3 and set to M (for module)

Next go to the /usr/src/squashfs/lzma457 directory and type in the following:
patch -p1 < ../sqlzma1-449.patch


Now go back one directory to /usr/src/squashfs and edit the Makefile and change
the line LzmaVer = near the top of the file to read
LzmaVer = lzma457

Then edit the line Kver = to
Kver = linux-2.6.25.9
(fedora change to)
Kver = 2.6.25.9-76.fc9.i686

Now save this file, and at the command prompt type in
ln -s /usr/src/linux-2.6.25.9 squashfs3.3/kernel-patches/
(for fedora do)
ln -s /usr/src/kernels/`uname -r` squashfs3.3/kernel-patches/
then
patch -p0 < patches/typo_mkflags_u.patch
then
patch -p0 < sqlzma2u-3.3.patch
then
patch -p0 < patches/mksquashfs_bug_fixes.patch
then
patch -p0 < patches/code_cleanup.patch

Don't worry about the mksquashfs_bug_fixes.patch reject. It is only a printf.
And now to build the new mksquashfs command as well as the 3 new kernel
modules. Type in the following:
make

If everything went well, then you should be able to copy the following files:

(none fedora)
mkdir /lib/modules/`uname -r`/extra
cp /usr/src/linux-2.6.25.9/fs/squashfs/*.ko /lib/modules/`uname
-r`/extra/
cp /usr/src/squashfs/lzma457/C/Compress/Lzma/kmod/*.ko
/lib/modules/`uname -r`/extra/
cp /usr/src/squashfs/squashfs3.3/squashfs-tools/mksquashfs
/sbin/mksquashfs.lzma

(fedora)
cp /usr/src/kernels/`uname -r`/fs/squashfs/*.ko /lib/modules/`uname
-r`/extra/
cp /usr/src/squashfs/lzma457/C/Compress/Lzma/kmod/*.ko
/lib/modules/`uname -r`/extra/
cp /usr/src/squashfs/squashfs3.3/squashfs-tools/mksquashfs
/sbin/mksquashfs.lzma

if you want to replace the existing command mksquashfs then
cp /usr/src/squashfs/squashfs3.3/squashfs-tools/mksquashfs /sbin/

Next we have to fix up the kernel dependencies with the following command
depmod -ae

You should get no messages if everything went well. Now we can load the
modules
modprobe squashfs

and finally if you do a
lsmod | head

then you should see unlzma, sqlzma, and squashfs modules. If you want to
verify if the filesystem is supported then type in
cat /proc/filesystems |grep squ

You should see squashfs

Remember always Good Luck, and have fun ;-)

Sean

_________________________________________________________________
Are you ready for Windows Live Messenger Beta 8.5 ? Get the latest for free
today!
http://entertainment.sympatico.msn.ca/WindowsLiveMessenger



Was this page helpful?
Yes No
Thread at a glance:

Previous Message by Date: click to view message preview

[PATCH] Allow the USB device to be a symlink to a device node

The attached patch allows the USB device passed to livecd-iso-to-disk to be specified as a symlink, e.g., /dev/disk/by-*/*. -- Ignacio Vazquez-Abrams <ivazqueznet-Re5JQEeQqe8AvxtiuMwx3w@xxxxxxxxxxxxxxxx> PLEASE don't CC me; I'm already subscribed 0001-Allow-the-USB-device-to-be-a-symlink-to-a-device-nod.patch Description: application/mbox signature.asc Description: This is a digitally signed message part

Next Message by Date: click to view message preview

Re: Modifying the original Fedora Live CD

Sean Godsell wrote: > With the exact same fedora image. I was able to save almost 110 > megabytes. Wow, what a savings. no doubt. > I don't know why fedora didn't > take the time to use squashfs+lzma, but it is worth it. I hope they put > it in the next release. Most likely because it doesn't appear to be included in the upstream kernel. When/if it is, this is a no-brainer. -- Rex

Previous Message by Thread: click to view message preview

[PATCH] Allow the USB device to be a symlink to a device node

The attached patch allows the USB device passed to livecd-iso-to-disk to be specified as a symlink, e.g., /dev/disk/by-*/*. -- Ignacio Vazquez-Abrams <ivazqueznet-Re5JQEeQqe8AvxtiuMwx3w@xxxxxxxxxxxxxxxx> PLEASE don't CC me; I'm already subscribed 0001-Allow-the-USB-device-to-be-a-symlink-to-a-device-nod.patch Description: application/mbox signature.asc Description: This is a digitally signed message part

Next Message by Thread: click to view message preview

Proper patch for squashfs+lzma support

Hello everyone, Okay the last patch I was told it was just a hack, so I decided to make it much easier for everyone ;-) Now the first step is to take one of the patches that I supplied in this email. For example I am going to use squashlzma-2.6.25.9-76.fc9.patch and copy it to my rpm build environment. Next I change directory to my rpm build environment, so in my case: cd $HOME/rpmbuild (for users using the default) cd /usr/src/redhat Next download and install the kernel source. For this example I downloaded kernel-2.6.25.9-76.fc9.src.rpm and to install it use the following command: rpm -ivh kernel-2.6.25.9-76.fc9.src.rpm Next I apply the patch using the following command: patch -p0 < squashlzma-2.6.25.9-76.fc9.patch Now the last step naturally takes the longest, but it is the build step. In my case I only want to build the binary packages with a target of i686, so I typed in the following: rpmbuild -bb --target=i686 SPECS/kernel.spec Wait for a long while, and wahla, you are the proud parents of a new baby kernel package with squash+lzma support. I supplied the linux-2.6-squashfs-lzma.patch as well if you want to try and patch any other fedora kernel. Remember always Good Luck, and have fun ;-) Sean _________________________________________________________________ If you like crossword puzzles, then you'll love Flexicon, a game which combines four overlapping crossword puzzles into one! http://g.msn.ca/ca55/208 squashlzma-2.6.25.9-76.fc9.patch Description: Binary data squashlzma-2.6.25-14.fc9.patch Description: Binary data linux-2.6-squashfs-lzma.patch Description: Binary data
Loading Comments...
Home | News | Patents | Sitemap | FAQ | advertise

Advertising by