HAL is a hardware abstraction layer, which is a piece of software that provides a view of the various hardware attached to a system. In addition to this, HAL keeps detailed metadata for each piece of hardware and provides hooks such that system and desktop-level software can react to changes in the hardware configuration in order to maintain system policy.
The most important goal of HAL is to provide plug-and-play facilities for
UNIX-like desktops with focus on providing a rich and extensible description of
device characteristics and features. One example of the functionality provided
by HAL is when you plug in a USB storage device. HAL can automatically create
an appropriate entry in the /etc/fstab file and create the corresponding mount
point in
Before emerging the needed programs you should enable
KOBJECT_UEVENT=y CONFIG_HOTPLUG=y
Before emerging you need to enable the
# euse -E hal # emerge -v hal dbus hotplug # rc-update add dbus default # /etc/init.d/dbus start # rc-update add hald default # /etc/init.d/hald start
Instead of configuring our software; we could just use some applications to do this for us.
# echo "sys-apps/pmount ~x86" >> /etc/portage/package.keywords # emerge -v pmount # emerge -v ivman
Now your window manager automatically asks you where he has to mount your external devices. The only thing we could renice is let hal make symlinks of our devices. We do this by making sure it is owned by group hal.
BUS=="usb", SYSFS{serial}=="123456789011121314", SYSFS{product}=="JUMPDRIVE",\ KERNEL=="sd?1", NAME="%k", SYMLINK="usbdrive", GROUP="hal" BUS=="usb", SYSFS{manufacturer}=="Sony", SYSFS{product}=="PSP Type A",\ KERNEL=="sd?1", NAME="%k", SYMLINK="psp", GROUP="hal" BUS=="usb", SYSFS{manufacturer}=="Apple", SYSFS{product}=="iPod",\ KERNEL=="sd?2", NAME="%k", SYMLINK="ipod", GROUP="hal"
and also edit
/dev/usbdrive /mnt/usbdrive auto noauto,rw,user 0 0 /dev/ipod /mnt/ipod auto noauto,rw,user 0 0 /dev/psp /mnt/psp auto noauto,rw,user 0 0
Make sure the options below are marked like said below in your kernel config
that is found at
# vim /usr/src/linux/.config MSDOS_FS=y VFAT_FS=y BLK_DEV_SD=y CHR_DEV_ST=y CHR_DEV_SG=y USB_STORAGE=y USB_UHCI_HCD=y USB_OHCI_HCD=n
# make # mount /boot/ # cp arch/your arch /boot/bzImage # /boot/linux-$ver -gentoo-$release
Now you should reboot and move further from this point after you reboot.
# dmesg | grep usb-storage
usb.c: USB device 4 (vend/prod 0xdda/0x2005) is not claimed by any active driver.
You can do this automatically by putting your driver name in
# emerge sg3_utils # Description: apps for querying the sg SCSI interface (contains rescan_scsi_bus.sh)
And right after that:
# mkdir /mnt/usbstick # mount -t vfat /dev/sda1 /mnt/usbstick
If you can't mount then try the alternative kernel config above that enables
SCSI generic support. Then run the following that should give you the correct
device name. You can now mount with the correct name (Eg.
# sg_scan -i # sg_map
# MY USB STICK /dev/sda1 /mnt/stick vfat noauto,user,exec,sync 0 0
Please note that you have to use vfat in the fstab file, because if you choose
auto you won't get the full name but only the first 8 chars. Add the option
"sync" to have synchronous changes between the actual usb mass storage device
and the place that it's been mounted. Otherwise it would be done while you
unmount it. This has the advantage of not losing data if you forgot to unmount
a device and also you would see how long it will take when you are transferring
data to it. You don't need to use vfat in the fstab file as long as
Specifically, if vfat exists in
# # This file defines the filesystems search order used by a # 'mount -t auto' command. # # Uncomment the following line if your modular kernel has vfat # support and you want mount to try vfat. vfat # Uncomment the following line if your modular kernel has udf # support and you want mount to try udf before iso9660. udf # Keep the last '*' intact as it directs mount to use the # filesystems list available at /proc/filesystems also. # Don't remove it unless you REALLY know what you are doing!
# mount -t ntfs /dev/hda1 /mnt/win # mount -t vfat /dev/hda2 /mnt/data
On all three filesystems (MS-DOS, VFAT, NTFS), mount lets you pass the uid and
gid options, which let you set the user and group IDs of who the files are
chown'd to when the filesystem is mounted. To find out the values for uid and
gid, run
umask: octal file permissions
You can change permissions using the parameter umask. But be aware that it must
be the bitmask of permissions that are not present for the mountpoint. It is an
octal number, formed like this:
# my windows partition /dev/hda1 /mnt/ntfs ntfs uid=1000,gid=100 0 0
utf8
You may also add utf8 option, if you can't see some files with international
characters in filenames.
/etc/fstab /dev/hda1 /mnt/vfat vfat ro,utf8 0 0
For more options:
# man mount 8
We need
# echo "sys-fs/captive ~x86" >> /etc/portage/package.keywords
Let's emerge captive now:
# emerge captive
Now load the appropriate kernel module and make it load at boot
# modules-update # modprobe fuse # echo "fuse" >> /etc/modules.autoload.d/kernel-2.6
Congrats; Captive is now installed. To acquire the necessary filesystems
drivers you should run the following command to locate your ntfs drives in a
nice wizard. You should choose to download the appropriate drivers from
# captive-install-acquire
After you walked through the wizard you should now be able to mount your windows partitions read/write.
# umount /mnt/win # mount -t captive-ntfs /dev/hda1 /mnt/win
If the following works without errors you may want to put it in your /etc/fstab
/dev/hda2 /windows captive-ntfs users 0 0
Caution: You'll need to recompile fuse if you update your kernel!
# modprobe -r fuse # emerge sys-fs/fuse # modules-update # modprobe fuse