|
Contents
About my 300M
I received my 300M August 29, 2003. It came pre-installed with some crappy operating system (Windows XP I think it was called). You'd think after paying $1500 for a computer, they could ship it with a decent operating system, but no, I had to put linux on it myself.
So, here's what I got:
- Processor: Pentium M @ 1.20GHz
- Memory: 384MB DDR @ 266MHz
- Storage: 30GB HD
- Media: CR-RW/DVD Combo
- Wireless: Intel Pro/Wireless 2100 miniPCI
- NIC: Integrated Broadcom 8705M
- Video: Integrated Intel 855GM
- BIOS ver: A01
Here's the status of how my laptop is coming along. I will update as I proceed.
| ok | RedHat 9 Install |
| ok | Ethernet, BroadCom 5705M |
| ok | Wireless, Intel Pro Wireless |
| ok | ACPI Power Management |
| untested | Special Buttons (volume, sleep) |
| untested | Suspend |
| looks good | CD-RW/DVD |
| ok | USB |
| untested | Firewire |
| untested | PCMCIA |
| mostly fine | Docking Bay |
RedHat Install
There weren't any difficulties during RedHat install. Grab the kernel source if you'd like to stick with 2.4.20, but my instructions below will be for the 2.4.22 kernel, which was the latest stable at the time of this writing.
I chose Intel 855 as video card, and "Dell 1024x768 Laptop Display Panel" as monitor. This appears to work fine.
Broadcom 5705M
Much thanks to Mike Hardy, for detailing his steps to get his 5705M ethernet NIC working on his Latitude D800. Below I paraphrase his instructions, which worked perfectly for me.
- Download the Broadcom bcm5700 driver.
- Enter the /usr/src directory:
cd /usr/src
- Make a symbolic link named "linux" to your current kernel. The stock Redhat 9 kernel is 2.4.20rev8 so the command
ln -s linux-2.4.20-8 linux will work if you're still using the stock kernel. However, if you're using another kernel (for instance the patched 2.4.22 kernel I recommend from the ACPI section below), make sure you link to that new directory (e.g. ln -s linux-2.4.22 linux.
- Make a new directory for the broadcom driver under /usr/src and copy the tarball there:
mkdir bcm5700; cp [wherever]/bcm5700-5.0.16.tar.gz /usr/src/bcm5700
- Enter previously created directory and unpack the broadcom driver:
cd bcm5700; tar -zxvf bcm5700-5.0.16.tar.gz
- Build the driver:
cd src; make clean; make
- Test the driver:
/sbin/insmod bcm5700.o
- Check the log to make sure it worked:
dmesg
- Install the module:
make install
- Add the line "
alias eth0 bcm5700" to the file /etc/modules.conf
- Reboot. (Sorry. I'm sure there's some way to get it to take without a reboot, but
/etc/rc.d/init.d/network restart didn't do it for me.
- After reboot, kudzu notes the new hardware, and prompts you to set up networking. Congrats!
Wireless
I had given up hope on the internal miniPCI Intel Pro Wireless 2100, as searching the net showed indicated that everyone else had given up on it since there are no linux drivers available.
Note 22 March 2004: I've learned of some other alternatives to the LinuxAnt DriverLoader software which is described below. NDisWrapper is a similar project, but a free and open source one. Also, Zhou Zheng sent me a link to Intel's recent release of WLAN drivers. Actually, this doesn't seem to be an official Intel driver; rather it appears Intel is sort of sponsoring an open-source project to develop a driver. I'll just quote the page: This project was created by Intel to enable support for the Intel PRO/Wireless 2100 (IPW2100) mini PCI adapter. This project is intended to be a community effort as much as is possible given some working constraints (mainly, no HW documentation is available). Read on below for the solution I'm currently using: LinuxAnt Driverloader.
However, my friend Dave Menendez sent me an email which shined like a ray of golden hope in my inbox. He received a Dell Latitude D600 from his employer, on which he installed Redhat 9. His D600 contains the same miniPCI Pro Wireless 2100, and he actually got it working!
He wrote up some instructions for me, and now my wireless card works great too! Dave gave me permission to post his instructions here. Here's a basic overview of his method, paraphrased from an email he sent me.
I tried out this product called DriverLoader from LinuxAnt which basically wraps Windows WLAN drivers for for you. It was really easy to install and set up, and once I figured out how to make a new ifcfg-<dev> file with the proper wireless parameters, I got it connected to my network and to the internet via my wireless network at home. I did it in a couple hours, even though yes, I unfortunately did have to use Windows XP drivers to do it. But hey, the end result is I'm up. You can get a 30-day trial license, and then to get a permanent one if you like it, it's only $19.95, which I think is dirt cheap for the headache I avoided.
Dirt cheap, indeed, considering the alternative is buying another wireless NIC. In fact, it's so cheap, you should feel guilty, and send Dave money so as to soothe your conscience. Here are his instructions, which I have only modified to occasionally make fun of him.
1) Download driverloader from LinuxAnt at www.linuxant.com/driverloader. They have binary RPMs for various architectures, source RPMs, or source archives. I downloaded the RedHat 9 binary distribution.
2) Locate the windows drivers for your WLAN card (you'll need the .INF file for it and any .SYS files it specifies). You might find these on the CDs that came with your laptop, or you might want to just download the most recent drivers from your laptop's manufacturer (I downloaded the most recent XP drivers from Dell's website and uncompressed them to a folder).
3) At LinuxAnt's website, get a 30-day trial license for driverloader. You'll have to register with an email address, confirm the email address, and supply the WLAN card's MAC address when requesting the license (you can wait to do this until after step 6 if you don't have the MAC address handy - it will be listed on the driverloader manager's web page).
4) Build and/or install the driverloader software.
5) Point a browser to http://127.0.0.1:18020 and log in as root. Use the web interface to upload your windows drivers to the driverloader manager. It will first ask you to specify the .INF file, then it will ask you to upload each .SYS file it needs.
6) When all the driver files have been uploaded, you should now see your WLAN card listed on the driverloader manager's web page with an invalid license. Click "Settings" next to the WLAN listed to enter the license information.
7) Your WLAN card will now have an interface name you can configure - on mine, it is eth1 (eth0 is my integrated wired NIC).
8) You can use the iwconfig and ifconfig commands to configure your card, or if you'd like it to be done for you on startup, create a file ifcfg-eth1 (or whatever your device is: ifcfg-<dev>) and place it in /etc/sysconfig/network-scripts. The following is an example of its contents:
DEVICE=eth1 # required
TYPE=Wireless # required
HWADDR=01:23:45:67:89:00 # your WLAN's MAC address; optional, I believe
ONBOOT=yes # if you want this interface brought up on startup
BOOTPROTO=dhcp # use if you use DHCP on your WLAN; otherwise use the standard options to configure its IP address
USERCTL=yes # if you want normal users to be able to bring this interface up/down
PEERDNS=yes # not familiar with this; not required, I don't think
IPADDR=
NETMASK=
GATEWAY=
NAME=
DOMAIN=
# Now for the wireless options
ESSID=MyWLAN
CHANNEL=
MODE=Managed
KEY='12345678901234567890 restricted'
RATE=Auto
A couple notes on the wireless options in the example above. This particular configuration associates my WLAN card with an Access Point (MODE=Managed; other options are ad-hoc and auto) serving a WLAN named "MyWLAN". The connection is encrypted, and the key is specified in hex in the KEY parameter. Note that the word "restricted" is required right after the hex key as shown in the example if the access point is configured with a "shared" key. If the access point is instead "open" (not "shared"), then the restricted keyword should not appear in the KEY parameter.
Obviously, these parameters will need tweaking depending on your particular setup, but those are the basics. Look at /etc/sysconfig/network-scripts/ifup-wireless for a more complete listing of wireless-specific options.
Another note: if you use redhat's redhat-config-network utility, you should place the ifcfg-eth1 file(s) in the appropriate profile folder under /etc/sysconfig/networking/profiles so it gets copied to the /etc/sysconfig/network-scripts folder automatically when the active profile is changed.
Yet another note: if you use redhat-config-network and are specifying a key, it may rewrite the value of the KEY parameter above as "s:<somehexvalue>", and the instructions tell you to prepend the key with "0x" if it's hex. However, this did not work at all for me! I had to manually edit the file and make the KEY value appear as it does in the above example for it to work (i.e., no "s:" prefix, no "0x" prefix).
9) Once the correct script is in /etc/sysconfig/network-scripts, simply do "ifup eth1", and wala [Dave has enough trouble with English... -Mike], you're now on a wireless network if all goes well.
Thanks Dave!
ACPI
This is what does all the power management, battery status stuff (see buttons section for getting ACPI events from the power button). This was kind of a pain in the ass because I had to create a new DSDT for my machine, but I guess I learned some stuff. It should not be a pain in the ass for you to follow my steps now.
Note: many people have said my DSDT doesn't work on their 300M. It seems the DSDT that I created is dependent upon my specific memory configuration. A friend has had luck with this DSDT, which you may want to try yourself.
First, grab the kernel you're going to be using. Redhat 9 comes with 2.4.20rev8, but I just grabbed the most recent when I was doing this, which was 2.4.22. I think both will work fine. If you want to be on the same page as me, here's the kernel 2.4.22 kernel. The command examples below assume 2.4.22 kernel.
There are two other things you'll need. First, a kernel patch to allow a custom DSDT and second, the compiled custom DSDT for the 300M itself.
- Copy the kernel to /usr/src/:
cp [wherever]/linux-2.4.22.tar.bz2 /usr/src
- Unpack the kernel
cd /usr/src; tar -jxvf linux-2.4.22.tar.bz2
- Copy the Custom DSDT patch to the new kernel directory:
cp [wherever]/osl.diff /usr/src/linux-2.4.22
- Apply the patch:
patch -p1 < osl.diff
- Copy the compiled DSDT to /tmp/:
copy [wherever]/dsdt.hex /tmp
- Rebuild the kernel. This ain't too tough. I had never done it before. Anyway, do a
make clean; make mrproper; make oldconfig. It will ask you a bunch of questions. Accept the defaults if you like, or if you know better, say yes to the things you'd like. One thing you shouldn't accept the default on is "ACPI Support (CONFIG_ACPI). Say yes here. (Don't say "Module". ACPI never worked for me when built as a module. I don't know why.) Next, say "No" to CPU Enumeration Only and then yes to AC Adapter, Battery, Button, Fan, Processor, Thermal Zone. Say no to the final four (ASUS and Toshiba Laptop Extras, Debug Statements, and Relaxed AML Checking). When it's done asking all the questions, do make dep; make bzImage; make modules; make modules_install; make install. That's it.
- Adjust /etc/grub.conf to point to the right partition. Alter the bit that says
root=LABEL=/ to say root=/dev/hdaX where X is the partition number of your linux kernel. If you're not sure 2is a good guess if you've done a clean install with default partitioning.
- Reboot using the new kernel.
To test it, you can add the 'Battery Charge Monitor' to your gnome panel, if you're using it. Or look in /proc/acpi and try cating some of the files there. For example cat /proc/acpi/battery/BAT1/state should show your battery charge state.
If you previously did the Broadcom driver stuff I talked about above, you'll have to do that over again for this kernel.
CD/DVD
Just burned a cd, and now burning another. Works great! I'm using burncenter. I had to patch up a couple things to get it work for me (nothing big: support spaces in mp3 filenames, an incorrect parameter pass to mpg123).
I can't get DVD playback working, but I don't think it's the fault of the drive. It spins up and will play parts of some DVDs (the FBI warning stuff on my Top Gun dvd, for example). I'm trying xine, mplayer, and ogle. No luck yet.
Buttons
These seems to be working fine. ACPI catches suspend (Function+Escape) presses and lid closes. The contrast buttons (Function+Up/Down) work fine. xev seems to catch keypresses for the others (like volume up/down), so I will have to do some xmodmap or xkb (whatever people use now) to make them do useful things.
Andrew Barr wrote me to say he figured out how to get the power button to generate ACPI events. He gave me permission to reproduce his email here.
I thought you might be interested to know that I have been able to coax ACPI events out of the 300m's power button. I read a very informative ACPI HOWTO on the Gentoo Linux forums (http://forums.gentoo.org/viewtopic.php?t=122145), and in Section 10c it described what to do if a power of sleep button was not working.
The poster goes into the hows and whys of these kinds of situations (evidently not uncommon at all), but the gist of how to fix it is this: you need this patch (http://bugzilla.kernel.org/attachment.cgi?id=1944&action=view), which is meant for a 2.6.1 kernel but applied to a vanilla 2.6.5 for me with no problem. Then, you build and boot from that kernel, adding the following to your kernel command line:
ignore_ff_buttons=PWRF
Then, you should see this:
ACPI: Power Button (CM) (PWRB)
instead of this:
ACPI: Power Button (FF) (PWRF)
in your kernel bootup messages. After that, you should get an event written to /proc/acpi/event every time the button is pressed, provided ACPI is working properly (e.g. patched DSDT in our case).
Thanks, Andrew.
Miscellaneous
I'm having trouble with the docking module thingie. If I plug the computer into the docking module while the computer is running, a little icon pops onto the screen and never goes away, and also the keyboard stops working. Haven't investigated further yet.
Knoppix and other Knoppix-like CDs don't usually boot correctly on the 300M. I believe the problem is that the CD-ROM is (or is emulated as) a USB CD-ROM, and most of the Knoppix-like CDs don't directly support USB CD-ROMs. However, I have found one that does: SystemRescueCD, which includes a 2.4.22 kernel with XFS support, screenreader (for blind people), GNU Parted, excellent filesystem support, and a variety of tools and editors.
After I installed my 2.4.22 kernel, my computer would not boot about 75% of the time. It would hang on 'Initializing firewire controller'. I did some looking on the net and saw that a few other people had this problem as well, but no solutions posted. Disabling the firewire module didn't help, as the system would hang at another point (at about the place it enters runlevel 5). I did find a solution that worked for me, though it's not real elegant. I added pre-install ohci1394 /bin/sleep 2 to my /etc/modules.conf file. This forces the machine to sleep for two seconds before loading the ohci1394 module. My machine boots every time now.
As I was working on the above boot problem, my brother Matt sent me this link [flash]. I'm not sure when I'll get around to hooking this machine up to my orbiting brain lasers. But apparently it's simple.
I was having trouble registering in rhn (Redhat Network). This page explains the fix.
Contact Me
If you have any questions about what I've done, or what to share some tips, please email me. Also you can visit my main website if you're bored.
|