Last week we started testing our USB drivers on real hardware. That involves a lot of quick fixes, followed by burning the CD image (or creating bootable USB disk) and rebooting the computer. Not very comfortable. So I decided to polish my script for adding HelenOS to existing GRUB and make it available for everyone.
The script is intended for PC platform and all it does is that it copies HelenOS kernel image to directory where existing GRUB can find it (i.e. the GRUB that is used to boot on real hardware) and adds a menu entry to GRUB.
The usual disclaimer - the script is provided as is. I have used it on my PC and it worked. However, it modifies boot loader files and double checking them before rebooting is more than recommended. Otherwise, you may end up with computer that will not boot at all.
You can download the script here. I placed it in
/usr/local/sbin and created sudo entry for it (it needs root privilege to modify
/boot directory where GRUB usually resides).
The script can modify GRUB menu in two ways. First, it can append the HelenOS entry to it or replace existing HelenOS entry. I prefer the latter because I do not need to modify the menu file manually at all. In order to use the replacing version, you need to add following two lines to your GRUB menu (usually
/boot/grub/grub.conf). Configuration needed for booting HelenOS will be placed between them.
### HelenOS automatic install start ### HelenOS automatic install end
Once you have done that, you can install HelenOS to it. Build HelenOS and run the script with
-h parameter. It will display quite verbose help together with guessed values of several important parameters. If the guesses looks okay, you can proceed to actual installation. I use following command:
sudo /usr/local/sbin/helenos_add_to_grub \ -c -r -t "HelenOS (USB support)"This replaces existing entry in GRUB (
-r), removes files from previous install (
-c) and sets a nice title. The script produces following output informing about performed actions:
==> Cleaning previous install ... --> rm -rf /boot/helenos ==> Creating GRUB HelenOS directory ... --> mkdir -p /boot/helenos ==> Installing HelenOS kernel and modules ... --> cp -R REPO-PATH/boot/distroot/boot /boot/helenos ==> Updating HelenOS GRUB menu ... ==> Backing-up current GRUB menu ... --> cp /boot/grub/menu.lst /boot/grub/menu.lst.bak ==> Replacing HelenOS entry in GRUB menu ... ==> Adding HelenOS to GRUB completed.
If you are not using standard locations of GRUB, you can use following parameters to change them:
- Path to GRUB menu configuration file
- GRUB device name where boot partition is (something like
- Directory where to copy HelenOS files (directory
/boot/helenosis used by default)
- GRUB path to
-odirectory (depending on your partition settings, it might be the same as
-oor without the
- Where is the boot dir of HelenOS build (
Ideas for improvements are welcomed. Patches with these improvements even more so.
UPDATE: New version supporting GRUB2 can be downloaded here. It also fixes bad usage of
getopt. Using it with GRUB2 is quite easy, difference is that as a GRUB configuration file is taken HelenOS file in
I tested the updated script on Ubuntu in VirtualBox and adding following lines to Makefile in root directory of HelenOS (USB branch checkout) allowed me smooth install:
install-to-grub: [ -e "image.iso" ] sudo /usr/local/sbin/helenos_add_to_grub \ --grub2 --title "HelenOS (USB)" \ -g /etc/grub.d/35_helenos_usb \ -o /boot/helenosusb -O /boot/helenosusb sudo update-grub
Advantage of having GRUB2 is that you can have more entries and removal is pretty simple (just remove entry in
/etc/grub.d and run
Still, be careful. Your GRUB installation may use slightly different settings. Verify that the
/etc/grub.d/35_helenos file looks okay, try to run it to see that it produces reasonable output before running
update-grub. Before rebooting double check