I recently got my hands on a Lenovo IdeaPad S9e netbook for a short amount of time (I don't own it), so I did a few tests with Debian unstable (more or less Lenny right now) and a Linux 2.6.28 kernel on it, see results below.
The machine type is 4187-42G, and it features an Intel Atom N270 CPU (with HyperThreading) at 1.6 GHz, 1 GB of DDR2 RAM, an 80 GB SATA drive, an 8.9" WSVGA 1024x600 (glossy) screen, VGA port, LAN, wifi, bluetooth, 2xUSB, SD card slot, PCI ExpressCard slot, built-in microphone, and a webcam.
You can enter the BIOS by pressing F2, the boot menu by pressing F12 during boot. Booting from USB works fine on this netbook. There's a Splashtop installation on the netbook (called "Lenovo Quickstart" here) which you can disable in the BIOS.
There's no CD-ROM drive, so the simplest way is to use a USB thumb drive for installation. Here's how you can prepare one containing a Lenny installer (assuming your USB thumb drive is /dev/sda):
$ wget http://cdimage.debian.org/debian-cd/5.0.1/i386/iso-cd/debian-501-i386-netinst.iso $ wget http://ftp.nl.debian.org/debian/dists/lenny/main/installer-i386/current/images/hd-media/boot.img.gz $ gunzip boot.img.gz $ dd if=boot.img of=/dev/sda1 $ mount -t vfat /dev/sda1 /mnt $ cp debian-500-i386-netinst.iso /mnt $ umount /mnt
If the above USB thumb drive doesn't boot correctly (which it did not in my case: GRUB error 17) it's probably because of a messed-up MBR. This is how you can fix it:
$ apt-get install mbr $ install-mbr /dev/sda
Then insert the USB thumb drive in the Lenovo IdeaPad S9e, choose USB boot in the BIOS, and start the installer. Most of the process works as usual, the only small difference is that you might want to load the "parted" installer module in order to resize the Windows-partition on the disk (if you want to keep it) to make space for Linux. The second (fat32) partition seems to keep a restore image and/or the Splashtop stuff, not sure.
Works out of the box using the snd_hda_intel driver. The hardware is onboard audio in the southbridge (82801G / ICH7) and uses the Realtek ALC269 codec. If some programs don't have working audio, try modprobe snd-pcm-oss.
Untested so far.
Works out of the box using the bluetooth and btusb driver. The laptop's Bluetooth device is USB-attached internally and shows up in lsusb as:
$ lsusb Bus 003 Device 002: ID 0a5c:2150 Broadcom Corp. $ dmesg usb 3-2: Product: BCM2046 Bluetooth Device
After modprobe btusb you can use hcitool / hciconfig etc. as usual, and/or enable more related stuff with /etc/init.d/bluetooth start.
The lm-sensors script detects the lm75, eeprom, i2c-dev, and i2c_i801 modules. The following is the 'sensors' output:
$ sensors acpitz-virtual-0 Adapter: Virtual device temp1: +36.0 °C (crit = +95.0 °C)
The hard drive temperature can be viewed with:
$ hddtemp /dev/sda /dev/sda: FUJITSU MHZ2080BH G1: 44 °C
The Intel ICH7 southbridge in this laptop supports High Performance Event Timers (HPET) which allows for more power savings and thus improved battery life.
$ dmesg | grep -i hpet ACPI: HPET 3F6E1E41, 0038 (r1 INTEL CALISTGA 6040000 LOHR 5A) ACPI: HPET id: 0x8086a201 base: 0xfed00000 hpet clockevent registered HPET: 3 timers in total, 0 timers will be used for per-cpu timer hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 hpet0: 3 comparators, 64-bit 14.318180 MHz counter
You can check the wakeups-per-second with powertop.
Works out of the box. It seems to be attached via USB internally (usb-storage driver).
$ lsusb Bus 001 Device 004: ID 0bda:0158 Realtek Semiconductor Corp. Mass Stroage Device
Untested so far.
Works fine, see comments for "acpitool" output.
Works out of the box using the tg3 driver.
$ modprobe tg3 tg3.c:v3.94 (August 14, 2008) tg3 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 tg3 0000:02:00.0: setting latency timer to 64 eth0: Tigon3 [partno(BCM95906) rev c002 PHY(5906)] (PCI Express) 10/100Base-TX Ethernet 00:11:22:33:44:55 eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] WireSpeed[0] TSOcap[0] eth0: dma_rwctrl[76180000] dma_mask[64-bit]
Works out of the box, both in X as well as in the console using gpm.
$ dmesg Synaptics Touchpad, model: 1, fw: 7.2, id: 0x1c0b1, caps: 0xd04731/0xa40000
I'm using the hibernate Debian package. You can explicitly force the usage of either method in /etc/hibernate/hibernate.conf by uncommenting the respective lines.
TryMethod disk.conf # TryMethod ram.conf
Suspend does not yet work out of the box, however, as the machine is unknown:
$ s2ram -n
Machine unknown
This machine can be identified by:
sys_vendor = "LENOVO "
sys_product = "418742G "
sys_version = "Lenovo "
bios_version = "14CN51WW "
See http://suspend.sf.net/s2ram-support.html for details.
After a few test I found that s2ram -f -a 3 works fine (tested from console only so far). Now this needs to be integrated upstream and in the Debian package (I'll file a bug report). Update: Submitted bug #520848, and an email to the upstream mailing list.
There doesn't seem to be a mainline driver for the Broadcom BCM4312 wifi card in the laptop, yet:
$ lspci -nn 05:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)
Neither the b43 nor the b43legacy drivers work as of 2.6.28. For now, one of two possible options is to build a (partly non-free) driver provided by Broadcom from source (option 2 would be to use ndiswrapper, I guess, but that's untested):
$ wget http://people.debian.org/~adamm/kernel/linux-kbuild-2.6.28_2.6.28-0.1_i386.deb $ dpkg -i linux-kbuild-2.6.28_2.6.28-0.1_i386.deb (currently needed in unstable due to bug #518115) $ apt-get install build-essential linux-headers-2.6.28-1-686 $ mkdir temp; cd temp $ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5_10_79_10.tar.gz $ tar xfvz hybrid-portsrc-x86_32-v5_10_79_10.tar.gz $ make -C /lib/modules/`uname -r`/build M=`pwd` clean $ make -C /lib/modules/`uname -r`/build M=`pwd` modules
If that worked, you can load the driver via:
$ rmmod bcm43xx; rmmod b43; rmmod b43legacy (you could also permanently blacklist these modules) $ modprobe ieee80211_crypt_tkip $ insmod ./wl.ko $ dmesg wl: module license '' taints kernel. wl 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 wl 0000:05:00.0: setting latency timer to 64 eth1: Broadcom BCM4315 802.11 Wireless Controller 5.10.79.10
You can now run iwconfig, iwlist, etc. from the command line, or use some GUIs such as kwifimanager.
In order to disable wireless, run:
$ rmmod wl
So far, I only tested WEP (but not WPA).
Works out of the box using the acpi_cpufreq driver. Use cpufreq-set -c 0 -g performance if you need full CPU power, cpufreq-set -c 0 -g powersave otherwise. Use -c 1 to do the same with the other CPU/core.
Works fine out of the box using the pcspkr module, tested with beep.
Works out of the box using the intel X.org driver.
$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 600, maximum 1024 x 1024
VGA disconnected (normal left inverted right x axis y axis)
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 195mm x 113mm
1024x600 60.0*+
800x600 60.3
640x480 59.9
TV disconnected (normal left inverted right x axis y axis)
DRI works out of the box with the (mainline, open-source) driver:
$ glxinfo | grep direct direct rendering: Yes
If you attach an external monitor or projector, you can enable it using xrandr as usual:
$ xrandr --output VGA --auto
You can also use a dual-head setup by adding this to your "Screen" section in /etc/X11/xorg.conf:
SubSection "Display"
Virtual 2048 2048
EndSubSection
After restarting the X server, you can play with xrandr and move the external screen (VGA) "below" the laptop's LCD screen (LVDS) for a simple dual-head setup. The GUI tools arandr or grandr are probably a bit simpler to use than plain command line xrandr.
Works fine, of course. The only small problem is that there are only two USB ports, more would have been better.
Works fine, it's an 80 GB SATA drive.
Works out of the box using the uvcvideo driver.
$ lsusb Bus 001 Device 005: ID 5986:0141 Acer, Inc $ modprobe uvcvideo uvcvideo: Found UVC 1.00 device Lenovo EasyCamera (5986:0141) input: Lenovo EasyCamera as /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/input/input9 usb 1-3: New USB device found, idVendor=5986, idProduct=0141 usb 1-3: New USB device strings: Mfr=3, Product=1, SerialNumber=0 usb 1-3: Product: Lenovo EasyCamera usb 1-3: Manufacturer: BISON Corporation
You can use luvcvideo for webcam viewing.
Lasts for ca. 3.5 hours, probably less if the system is under high load.
Fn+CursorUp / Fn+CursorDown (brightness), Fn+ESC (enable/disable webcam), Fn+F1 (sleep mode), Fn+F2 (enable/disable TFT backlight), Fn+F6 (enable/disable thouchpad), Fn+F7 (Num lock), Fn+F8 (scroll lock), and Fn+F11 (F12 key) all work fine.
Fn+F3, Fn+F5, Fn+F9, Fn+F10, and all other special keys are untested.
The power, disk activity, CAPS lock, Num lock, and battery charging LEDs all work fine out of the box.
-[0000:00]-+-00.0 Intel Corporation Mobile 945GME Express Memory Controller Hub [8086:27ac]
+-02.0 Intel Corporation Mobile 945GME Express Integrated Graphics Controller [8086:27ae]
+-02.1 Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller [8086:27a6]
+-1b.0 Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller [8086:27d8]
+-1c.0-[0000:02]----00.0 Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express [14e4:1713]
+-1c.1-[0000:03-04]--
+-1c.2-[0000:05]----00.0 Broadcom Corporation BCM4312 802.11b/g [14e4:4315]
+-1d.0 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 [8086:27c8]
+-1d.1 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 [8086:27c9]
+-1d.2 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca]
+-1d.3 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 [8086:27cb]
+-1d.7 Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller [8086:27cc]
+-1e.0-[0000:06]--
+-1f.0 Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge [8086:27b9]
+-1f.1 Intel Corporation 82801G (ICH7 Family) IDE Controller [8086:27df]
+-1f.2 Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller [8086:27c4]
\-1f.3 Intel Corporation 82801G (ICH7 Family) SMBus Controller [8086:27da]
See comments.
All in all it's a really nice hardware, and it works (more or less) flawlessly without much hassle with recent distros/kernels.
Update 2009-03-22: Updated various sections, added more info. Added resources section.
I've been planning to write about building custom ARM toolchains for a while (I used stuff from gnuarm.com in the past, but I switched to the lastest and greatest upstream versions at some point). Among other things, recent upstream versions now have ARM Cortex support.
First you will need a few base utilities and libs (this list may not be complete):
$ apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo build-essential
Then you can use my tiny build-arm-toolchain script, which will download, build, and install the whole toolchain:
$ cat build-arm-toolchain #!/bin/sh # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain. [...]
The final toolchain is located in /tmp/arm-cortex-toolchain per default, and is ca. 170 MB in size. I explicitly created the build script in such a way that it minimizes the amount of disk space used during the build (ca. 1.2 GB or so, compared to more than 3 GB in the "naive" approach).
Using the "-j 2" option for make (see script) you can speed up the build quite a bit on multi-core machines (ca. 30 minutes vs. 60 minutes on an AMD X2 dual-core box). Also, you can change the script to build for other target variants if you want to (arm-elf or arm-none-eabi, for example).
Checkout the blog entry How to build arm gnu gcc toolchain for Mac OS X by Piotr Esden-Tempski for similar instructions for Mac OS X users.
Oh, and while I'm at it — does anybody have any idea why there are no pre-built toolchains for embedded (microcontroller) ARM targets in Debian? There are some toolchains for other microcontroller architectures (avr, m68hc1x, h8300, z80) but not too much other stuff. Is there some specific reason for the missing ARM toolchains (other than "nobody cared enough yet")?
I have heard about Emdebian, but from a quick look that seems to be more intended for toolchains with Linux/libc, not for microcontroller firmware (i.e. no MMU, no Linux, no libc etc.), but maybe I'm wrong?
Stuff I didn't expect I'd had to type today:
$ dpkg-repack dpkg-repack
Seriously.
It's been announced at quite a few places, so you probably already heard about it: Miro 2.0, the new major release of the cross-platform Internet RSS audio/video aggregator and player has been released.
Miro is available for Linux, Windows, and Mac OS X, the new release on Linux now features a "native" GTK+ widgets UI (instead of the Mozilla-based HTML widgets of earlier versions) and supports both a xine, as well as gstreamer renderer (for audio and video).
I won't even attempt to list all the improvements and new features, please check the release notes and the feature list for details. Overall more than 670 issues have been fixed since the last 1.2.x series release.
You can also watch this video (Ogg Theora, 10 MB) for a short introduction in Miro 2.0.
Together with the software release, the getmiro.com website, as well as the online Miro Guide have been competely rewritten and are a lot more usable and better-looking than before.
Finally, I have uploaded a new Miro 2.0 Debian package to unstable yesterday, by now it should be available from most mirrors. For Debian we're defaulting to xine at the moment, but please consult README.Debian if you want to switch to the gstreamer backend.
Please test the new release extensively so the few remaining issues (if any) can be ironed out soon...
As I wrote quite a while ago, I set up a RAID5 with three
IDE disks at home, which I'm using as backup (yes, I know that
RAID != backup) and storage space.
A few days ago, the RAID was put to a real-life test for the first time, as one of the disks died. Here's what that looks like in dmesg:
raid5: raid level 5 set md1 active with 3 out of 3 devices, algorithm 2
RAID5 conf printout:
--- rd:3 wd:3
disk 0, o:1, dev:hda2
disk 1, o:1, dev:hdg2
disk 2, o:1, dev:hde2
[...]
hdg: dma_timer_expiry: dma status == 0x21
hdg: DMA timeout error
hdg: 4 bytes in FIFO
hdg: dma timeout error: status=0x50 { DriveReady SeekComplete }
ide: failed opcode was: unknown
hdg: dma_timer_expiry: dma status == 0x21
hdg: DMA timeout error
hdg: 252 bytes in FIFO
hdg: dma timeout error: status=0x50 { DriveReady SeekComplete }
ide: failed opcode was: unknown
hdg: dma_timer_expiry: dma status == 0x21
hdg: DMA timeout error
hdg: 252 bytes in FIFO
hdg: dma timeout error: status=0x58 { DriveReady SeekComplete DataRequest }
ide: failed opcode was: unknown
hdg: DMA disabled
ide3: reset: success
hdg: dma_timer_expiry: dma status == 0x21
hdg: DMA timeout error
hdg: 252 bytes in FIFO
hdg: dma timeout error: status=0x58 { DriveReady SeekComplete DataRequest }
ide: failed opcode was: unknown
hdg: DMA disabled
ide3: reset: success
hdg: status timeout: status=0x80 { Busy }
ide: failed opcode was: 0xea
hdg: drive not ready for command
hdg: lost interrupt
hdg: task_out_intr: status=0x50 { DriveReady SeekComplete }
ide: failed opcode was: unknown
hdg: lost interrupt
hdg: task_out_intr: status=0x50 { DriveReady SeekComplete }
ide: failed opcode was: unknown
That's when I realized that something was horribly wrong.
Not long after that, these messages appeared in dmesg. As you can see the software-RAID automatically realized that a drive died and removed the faulty disk from the array. I did not lose any data, and the system did not freeze up; I could continue working as if nothing happened (as it should be).
md: super_written gets error=-5, uptodate=0 raid5: Disk failure on hdg2, disabling device. raid5: Operation continuing on 2 devices. RAID5 conf printout: --- rd:3 wd:2 disk 0, o:1, dev:hda2 disk 1, o:0, dev:hdg2 disk 2, o:1, dev:hde2 RAID5 conf printout: --- rd:3 wd:2 disk 0, o:1, dev:hda2 disk 2, o:1, dev:hde2
This is how you can check the current RAID status:
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 hda2[0] hde2[2] hdg2[3](F)
584107136 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
The "U_U" means two of the disks are OK, and one is faulty/removed. The desired state is "UUU", which means all three disks are OK.
The next steps are to replace the dead drive with a new one, but first you should know exactly which disk you need to remove (in my case: hda, hde, or hdg). If you remove the wrong one, you're screwed. The RAID will be dead and all your data will be lost (RAID5 can survive only one dead disk at a time).
The safest way (IMHO) to know which disk to remove is to write down the serial number of the disk, e.g. using smartctl, and then check the back side of each disk for the matching serial number.
$ smartctl -i /dev/hda | grep Serial $ smartctl -i /dev/hde | grep Serial $ smartctl -i /dev/hdg | grep Serial
(ideally you should get the serial numbers before one of the disks dies)
Now power down the PC and remove the correct drive. Get a new drive which is at least as big as the one you removed. As this is software-RAID you have quite a lot of flexibility; the new drive doesn't have to be from the same vendor / series, it doesn't even have to be of the same type (e.g. I got a SATA disk instead of another IDE one).
Insert the drive into some other PC in order to partition it correctly (e.g. using fdisk or cfdisk). In my case I needed a 1 GB /boot partition for GRUB, and the rest of the drive is another partition of the type "Linux RAID auto", which the software-RAID will then recognize.
Then, put the drive into the RAID PC and power it up. After a successful boot (remember, 2 out of 3 disks in RAID5 are sufficient for a working system) you'll have to hook-up the new drive into the RAID:
$ mdadm --manage /dev/md1 --add /dev/sda2 mdadm: added /dev/sda2
My new SATA drive ended up being /dev/sda2, which I added using mdadm. The RAID immediately starts restoring/resyncing all data on that drive, which may take a while (2-3 hours, depends on the RAID size and some other factors). You can check the current progress with:
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sda2[3] hda2[0] hde2[2]
584107136 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
[>....................] recovery = 0.1% (473692/292053568) finish=92.3min speed=52632K/sec
As soon as this process is finished you'll see this in dmesg:
md: md1: recovery done. RAID5 conf printout: --- rd:3 wd:3 disk 0, o:1, dev:hda2 disk 1, o:1, dev:sda2 disk 2, o:1, dev:hde2
In /proc/mdstat you'll see "UUU" again, which means your RAID is fully functional and redundant (with three disks) again. Yay.
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sda2[1] hda2[0] hde2[2]
584107136 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
Btw, another nice utility you might find useful is hddtemp, which can check the temperature of the drives. You should take care that they don't get too hot, especially so if the RAID runs 24/7.
$ hddtemp /dev/hda dev/hda: SAMSUNG HD300LD: 38 °C $ hddtemp /dev/hde dev/hde: SAMSUNG HD300LD: 44 °C $ hddtemp /dev/sda dev/sda: SAMSUNG HD322HJ: 32 °C
Recent comments
25 weeks 1 day ago
51 weeks 3 days ago
1 year 6 weeks ago
1 year 7 weeks ago
1 year 7 weeks ago