Difference between revisions of "Linux on Apple TV"

From AwkwardTV
Jump to: navigation, search
m
Line 1: Line 1:
====PAGE UNDERGOING OFFLINE REWRITE, TEMPORARILY LOCKED====
+
==Current Status==
  
==Latest update Apr 5==
+
This page will is being reworked, and may be in flux. Feel free to add to it-- but at certain times it may be locked, and merged with the offline page.
'''Gimli from the [http://www.mactel-linux.org/wiki/AppleTV mactel-linux] project has got the Linux kernel to boot. The loader, kernel patch and instructions will released after some polishing.'''
 
  
The AppleTV refuses to boot third-party EFI executables, so a workaround had to be found.
+
* Edgar (gimli) Hucek from the [http://www.mactel-linux.org/wiki/AppleTV mactel-linux] project, and AwkwardTV contributor, has gotten the Linux kernel to boot via a custom loader-- which is itself loaded by the AppleTV boot.efi loader. [http://www.mactel-linux.org/wiki/Main_Page gimli first got linux running on EFI-based intel Macs.]
  
==awkwardTV dev notes==
+
''Our overall focus will now be geared towards working with gimli to extend his Linux efforts on the AppleTV''
Many of us would like to see a minimal AppleTV targeted source distribution emerge with boot and kernel configs, and perhaps scripts for USB or disk image builds. After getting proper NVidia accelerated video, we hope the GeexBox developers will come on board to provide some polish.
 
  
Join the discussion on the [irc://irc.moofspeak.net/awkwardtv IRC Channel].  
+
* A solution for booting any non-Apple EFI executables has not been discovered as of this writing.
  
Wrapping elilo in a Mach-O binary was apparently the route taken by gimli. Good job!
+
''A secondary, yet important focus will be providing information to enable alternative non-Apple bootloaders, and methods that do not require MacOS X''
  
The linux kernel running on the intel mac mini ''pre-bootcamp'': [http://www.madingley.org/macmini/] [http://refit.sourceforge.net/myths/]
+
==AwkwardTV Linux Project==
 +
Many of us would like to see a minimal source distribution, targeted for AppleTV and utilizing the Linux kernel, emerge with boot and kernel configs. Extras might include scripts for USB or disk image builds. Currently we will be working with gimli's Mach-O wrapper approach to bootstrapping, and this will require a MacOS X setup. His loader will require MacOS X to compile the Mach-O binary, and MacOS X will be required to manipulate the partitions to load Linux. The latter is due to incomplete HFS+ support as of kernel 2.6.20.
  
[http://forum.insanelymac.com/index.php?showtopic=17917&st=0 The 2006 osx86 EFI thread has some interesting info.]
+
Please discuss your ideas on the [irc://irc.moofspeak.net/awkwardtv #awkwardtv IRC Channel]!
  
[http://refit.sourceforge.net/doc/c1s1_install.html rEFIt released a new version recently, try and install it on an OSX enabled AppleTV]
+
It bears mentioning that we recommend a '''complete backup''' of your original AppleTV drive before any experimentation. [http://wiki.awkwardtv.org/wiki/Backup_your_original_Hard_Drive We have a wiki page dedicated to this subject.] Remember, if you pipe the dd through gzip or bzip2, the virgin drive image created should only be ~2.5gb!
  
[http://www.kernelthread.com/publications/firmware/ Amit Singh's discussion on the EFI shell environment.]
+
==Hardware Support==
 +
Much of the AppleTV's hardware is supported natively under the Linux kernel. In this section, we will be expanding on the Linux driver details.
  
[http://www.roughlydrafted.com/RD/Home/0E960A5B-E16E-40A6-B4FD-E4C28F77A366.html Understanding MBR, APM, & GPT]
+
GeForce 7300 Go (NV40)
 
+
* ''Official NVidia binary driver works without modification!''
''Point of interest:'' [http://wiki.awkwardtv.org/wiki/index.php?title=USB The AppleTV can boot from an external USB hard drive with a properly setup AppleTV OS partition.] USB flash memory sticks are also an option. This is a good avenue for testing linux projects.
+
* OSS NVidia driver works without modification
 
+
<pre>
''Safety first:'' Obviously, it is recommended that you do a '''full backup''' of your original AppleTV drive before experimenting. [http://wiki.awkwardtv.org/wiki/Backup_your_original_Hard_Drive Linux instructions can be found at the bottom of this wiki page.] You will need about 40GB of space. Linux cannot reliably write HFS+ partitions.
+
(==) NV(0): Write-combining range (0x10000000,0x4000000)
 
+
(II) NV(0): Using XFree86 Acceleration Architecture (XAA)
==Bootloader  ==
+
Screen to screen bit blits
Since Apple TV is EFI-based and apparently has no CSM BIOS emulation, we need an EFI-based bootloader.
+
Solid filled rectangles
 
+
8x8 mono pattern filled rectangles
=== rEFIt ===
+
Indirect CPU to Screen color expansion
[http://refit.sourceforge.net/ The rEFIt Project] is a good starting point. rEFIt is a boot menu and maintenance toolkit for EFI-based machines like the Apple TV. It can boot multiple operating systems and provides an easy way to enter and explore the EFI pre-boot environment.
+
Solid Lines
 
+
Scanline Image Writes
[http://refit.sourceforge.net/myths/ Myths and Facts About Intel Macs] A good primer, recommended.
+
Offscreen Pixmaps
 
+
Setting up tile and stipple cache:
rEFIt was originally designed for Intel Macs, but may see another use on AppleTV. An tester using an external USB drive attempting to boot into rEFIt reports that it failed. You may know a different method, feel free to try.
+
32 128x128 slots
 
+
32 256x256 slots
=== elilo ===
+
16 512x512 slots
[http://elilo.sourceforge.net/ elilo] is an EFI linux boot loader. http://www.mactel-linux.org/wiki/Using_elilo has some information on using it with Intel Macs.
+
</pre>
 
+
* HDMI - working (DVI tested)
==Work In Progress==
+
* Component - not tested
 
 
Booting must be achieved with a bootloader such as elilo due to AppleTV's EFI firmware. We have not had much success with the rEFIt kit as of yet. If you know of other tools, please post them at the bottom of the page.<br>
 
  
Hint: '''[http://www.coraid.com/support/cln/CLN-HOWTO/ar01s09.html Enabling netconsole in the kernel is highly recommended]'''<br>
+
Intel HD Audio
 +
* HDA-Intel driver recognized by default
 +
* Analogue RCA - not tested
 +
* Optical SPDIF - not tested
  
Hint: Adopting the existing '''imacfb''' driver in the linux kernel should be explored, perhaps before experimenting with VESA. We have been told that VESA may be a dead end...
+
irDA interface
 +
* mactel-linux driver recognizes it, untested otherwise
  
'''Recommended reading:'''
+
Broadcom BCM94321MC wireless
* [http://www.mactel-linux.org/wiki/Main_Page The Mactel Linux group first got linux running on EFI-based  intel Macs.]
+
* NDISWrapper Windows drivers - working
  
* [http://www.madingley.org/macmini/ James McKenzie's excellent linux on Mac Mini tutorial, with sources.]
+
[http://wiki.awkwardtv.org/wiki/index.php?title=Parts Our components wiki] has further information about the specific chips involved.
  
* [http://osxbook.com/book/bonus/misc/linux/ osxbook.com's linux method for 17 & 20-inch iMacs]
+
==Barebones Distro Notes==
 
+
Our preferred base distrubutions:
* [http://en.wikipedia.org/wiki/Extensible_Firmware_Interface Learn about EFI from wikipedia]
+
* [http://lunar-linux.org/ Lunar Linux 1.61] A full source based distro, customizable and friendly.
 
 
* [https://www.tianocore.org/ www.tianocore.org] Intel-sponsored open-source EFI Framework initiative. Has devkits.
 
 
 
===Barebones Packages===
 
''Useful distros:''<br>
 
* [http://lunar-linux.org/ Lunar Linux 1.61] A source based distro, like Gentoo.<br>
 
 
* [http://www.minimalinux.org/ttylinux/showpage.php?pid=4 ttylinux 6.0] A micro distro (8MB w/kernel)
 
* [http://www.minimalinux.org/ttylinux/showpage.php?pid=4 ttylinux 6.0] A micro distro (8MB w/kernel)
 
* ...
 
* ...
  
''Required packages:''<br>
+
There are a few Linux distributions specialized for Media Center usage:
* [http://elilo.sourceforge.net/cgi-bin/blosxom elilo bootloader] 3.6 (stable)<br>
 
''Discovering the proper elilo configuration is the key to linux on AppleTV.''<br>
 
* [http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2 Linux kernel] 2.6.20.4 (stable)<br>
 
''Source included in many distros. Required for customization, of course.''<br>
 
* [http://www.nvidia.com/object/linux_display_ia32_1.0-9755.html NVidia binary driver] (latest)<br>
 
''Provides the video acceleration; unknown if HDMI output works.''<br>
 
''May be dependent on the PC BIOS architecture, will not load without work.''<br>
 
'''FIXME: details please. VGA BIOS emulation?'''
 
 
 
<br>
 
''Suggested packages for a minimal distro:''<br>
 
* [http://www.busybox.net/ BusyBox] 1.4.2 (stable). <br>
 
* [http://projects.o-hand.com/matchbox/ MatchBox Window Manager]<br>
 
* [http://ftp.x.org/pub/X11R7.2/src/ XOrg X11R7.2]<br>
 
''We would prefer a lightweight X alternative or optimized/minimal X11 build.''<br>
 
''Note: KDrive is framebuffer only. ''<br>
 
<br>
 
 
 
===Chipset Support===
 
See the [http://wiki.awkwardtv.org/wiki/index.php?title=Parts AppleTV components wiki] to assess driver functionality under linux.
 
 
 
===Wireless Support===
 
The AppleTV wireless card is based on the Broadcom BCM94321MC chip.
 
 
 
Note: AppleTV's Broadcom BCM43xx based mini-PCI wireless card may not have stable Linux kernel drivers, but a [http://www.atheros.com/pt/index.html Atheros] mini-PCI wireless card could be directly substituted in the AppleTV unit. Someone will have to test if the standard MacOS X kernel can use the Atheros chipset.
 
 
 
* Use the Windows Drivers along with NDISWrapper
 
 
 
See the following for help on how to do this:
 
http://ndiswrapper.sourceforge.net/mediawiki/index.php/Installation
 
 
 
* ''The following is untested as of yet:''
 
 
 
Since late 2005 there have been drivers for the Broadcom wireless (43XX chipset - This is used in all current macbooks and the AppleTV). Here is a basic how to to get wireless working on an apple desktop running linux and it may be helpful for AppleTV users.
 
 
 
* Download the driver files from one of the links below:
 
 
 
http://boredklink.googlepages.com/wl_apsta.o
 
http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
 
 
 
* Download and install the latest version of bcm43xx-fwcutter from:
 
 
 
http://developer.berlios.de/project/showfiles.php?group_id=4547
 
 
 
* Execute: mkdir /lib/firmware
 
 
 
* Execute: bcm43xx-fwcutter -w /lib/firmware insert_driver_from_step1_here
 
 
 
* Make sure you have iwconfig installed.
 
 
 
* To use this driver, execute: modprobe bcm43xx
 
 
 
However I must note, this was valid for previous versions of the broadcom cards (b/g). The N capable version in the AppleTV will most likely not be compatible until a new driver file is released for it.
 
 
 
'''***update***'''
 
It may be possible to use the latest firmware for windows and extract the firmware from that:
 
http://www.x-drivers.com/component/option,com_remository/func,fileinfo/id,9957/
 
 
 
===Video Support===
 
We need answers on whether NVidia's current binary drivers will output video on AppleTV. They only provide acceleration under Xfree86/XOrg as far as we can tell. [http://us.download.nvidia.com/XFree86/Linux-x86/1.0-9755/README/appendix-j.html NVidia's current documentation may give you some insight.] Update this section if you know how to get 2D acceleration with the NVidia 7300 *without* X under linux. We could work with just an accelerated framebuffer to start.
 
 
 
[http://www.nvnews.net/vbulletin/showthread.php?t=88679 NVidia's current drivers have HD output bugs, with no ETA for fixes.]
 
 
 
'''Another method:''' [http://www.directfb.org/ DirectFB], released March 4, 2007, is a thin library that provides hardware graphics acceleration, input device handling and abstraction, integrated windowing system with support for translucent windows and multiple display layers, not only on top of the Linux Framebuffer Device. It is a complete hardware abstraction layer with software fallbacks for every graphics operation that is not supported by the underlying hardware. DirectFB adds graphical power to embedded systems and sets a new standard for graphics under Linux.
 
 
 
===EFI Firmware===
 
Apple may decide to disable some "features" in the future (ala Microsoft xbox360). We need someone to figure out how to dump a copy of the current AppleTV firmware, in case we need to revert. Desoldering the EEPROM will be a last resort. Please edit this wiki section with new information/instructions.
 
 
 
Do not post a link to the firmware image, that would be illegal.
 
 
 
== Useful Linux Distributions ==
 
There are several Linux distributions specialized for Media Center usage.
 
 
* [http://www.knoppmyth.net/ KnoppMyth] (Knoppix with MythTV)
 
* [http://www.knoppmyth.net/ KnoppMyth] (Knoppix with MythTV)
 
* [http://www.geexbox.org/en/index.html GeexBox] (bootable mplayer with Freevo)
 
* [http://www.geexbox.org/en/index.html GeexBox] (bootable mplayer with Freevo)
 
* ...
 
* ...
  
== dmesg output ==
+
Some useful components:
Source : http://www.mactel-linux.org/wiki/Dmesg_appletv
+
* [http://elilo.sourceforge.net/cgi-bin/blosxom elilo bootloader] 3.6 (stable)
<pre>
+
* [http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2 The Linux kernel] 2.6.20.4 (recent)
[    0.000000] Linux version 2.6.20.4-mactel (root@athlonx2) (gcc version 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)) #59 Wed Apr 4 23:02:10 UTC 2007
+
* [http://www.nvidia.com/object/linux_display_ia32_1.0-9755.html NVidia binary driver] (latest)
[   0.000000] EFI: EFI v1.10 by Apple
+
* [http://www.busybox.net/ BusyBox] 1.4.2 (stable)
[    0.000000]  ACPI=0xfefd000 <6> ACPI 2.0=0xfefd014 <6> SMBIOS=0xfebe000
+
* [http://projects.o-hand.com/matchbox/ MatchBox Window Manager]
[    0.000000] 0MB HIGHMEM available.
+
* [http://ftp.x.org/pub/X11R7.2/src/ XOrg X11R7.2]
[    0.000000] 255MB LOWMEM available.
+
''We would prefer a lightweight X alternative or optimized/minimal X11 build.''
[    0.000000] Entering add_active_range(0, 0, 65280) 0 entries of 256 used
+
''Note: KDrive is framebuffer only.''
[    0.000000] Zone PFN ranges:
 
[    0.000000]  DMA            0 ->    4096
 
[    0.000000]  Normal      4096 ->    65280
 
[    0.000000]  HighMem    65280 ->    65280
 
[    0.000000] early_node_map[1] active PFN ranges
 
[    0.000000]    0:        0 ->    65280
 
[    0.000000] On node 0 totalpages: 65280
 
[    0.000000]  DMA zone: 32 pages used for memmap
 
[    0.000000]  DMA zone: 0 pages reserved
 
[    0.000000]  DMA zone: 4064 pages, LIFO batch:0
 
[    0.000000]  Normal zone: 478 pages used for memmap
 
[    0.000000]  Normal zone: 60706 pages, LIFO batch:15
 
[    0.000000]  HighMem zone: 0 pages used for memmap
 
[    0.000000] DMI 2.4 present.
 
[    0.000000] ACPI: RSDP (v002 APPLE                                ) @ 0x0fefd014
 
[    0.000000] ACPI: XSDT (v001 APPLE  Apple00 0x000000d9      0x01000013) @ 0x0fefd1c0
 
[    0.000000] ACPI: FADT (v003 APPLE  Apple00 0x000000d9 Loki 0x0000005f) @ 0x0fefb000
 
[    0.000000] ACPI: HPET (v001 APPLE  Apple00 0x00000001 Loki 0x0000005f) @ 0x0fefa000
 
[    0.000000] ACPI: MADT (v001 APPLE  Apple00 0x00000001 Loki 0x0000005f) @ 0x0fef9000
 
[    0.000000] ACPI: MCFG (v001 APPLE  Apple00 0x00000001 Loki 0x0000005f) @ 0x0fef8000
 
[    0.000000] ACPI: ASF! (v032 APPLE  Apple00 0x00000001 Loki 0x0000005f) @ 0x0fef7000
 
[    0.000000] ACPI: SSDT (v001 APPLE  Cpu0Ist 0x00003000 INTL 0x20050309) @ 0x0fef2000
 
[    0.000000] ACPI: SSDT (v001 APPLE  Cpu0Cst 0x00003001 INTL 0x20050309) @ 0x0fef3000
 
[    0.000000] ACPI: SSDT (v001 APPLE    CpuPm 0x00003000 INTL 0x20050309) @ 0x0fef1000
 
[    0.000000] ACPI: DSDT (v001 APPLE  AppleTV 0x00010001 INTL 0x20050309) @ 0x00000000
 
[    0.000000] ACPI: PM-Timer IO Port: 0x408
 
[    0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000
 
[    0.000000] Allocating PCI resources starting at 10100000 (gap: 10000000:00400000)
 
[    0.000000] Detected 1000.158 MHz processor.
 
[  38.674978] Built 1 zonelists.  Total pages: 64770
 
[  38.674983] Kernel command line: root=/dev/sda3 video=imacfb
 
[  38.675255] Enabling fast FPU save and restore... done.
 
[  38.675259] Enabling unmasked SIMD FPU exception support... done.
 
[  38.675271] Initializing CPU#0
 
[  38.675341] PID hash table entries: 1024 (order: 10, 4096 bytes)
 
[  38.675397] Console: colour dummy device 80x25
 
[  38.675570] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
 
[  38.675741] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
 
[  38.688631] Memory: 253128k/261120k available (1836k kernel code, 5260k reserved, 694k data, 180k init, 0k highmem)
 
[  38.688658] virtual kernel memory layout:
 
[  38.688660]    fixmap  : 0xfffeb000 - 0xfffff000  (  80 kB)
 
[  38.688662]    pkmap  : 0xff800000 - 0xffc00000  (4096 kB)
 
[  38.688665]    vmalloc : 0xd0800000 - 0xff7fe000  ( 751 MB)
 
[  38.688667]    lowmem  : 0xc0000000 - 0xcff00000  ( 255 MB)
 
[  38.688669]      .init : 0xc037c000 - 0xc03a9000  ( 180 kB)
 
[  38.688671]      .data : 0xc02cb0a1 - 0xc037894c  ( 694 kB)
 
[  38.688674]      .text : 0xc0100000 - 0xc02cb0a1  (1836 kB)
 
[  38.688700] Checking if this processor honours the WP bit even in supervisor mode... Ok.
 
[  38.688906] Oops: efitime: can't read time status: 0x80000007
 
[  38.688936] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
 
[  38.688946] hpet0: 3 64-bit timers, 14318180 Hz
 
[  38.689956] Using HPET for base-timer
 
[  38.772185] Calibrating delay using timer specific routine.. 2002.15 BogoMIPS (lpj=3336254)
 
[  38.772213] EFI: ioremap of 0xB178000 failed
 
[  38.772218] EFI: ioremap of 0xB19D000 failed
 
[  38.772224] EFI: ioremap of 0xB1C8000 failed
 
[  38.772262] Mount-cache hash table entries: 512
 
[  38.772403] CPU: After generic identify, caps: afe9fbff 00100000 00000000 00000000 00000180 00000000 00000000
 
[  38.772420] CPU: L1 I cache: 32K, L1 D cache: 32K
 
[  38.772429] CPU: L2 cache: 2048K
 
[  38.772435] CPU: After all inits, caps: afe9fbff 00100000 00000000 00002040 00000180 00000000 00000000
 
[  38.772448] Compat vDSO mapped to ffffe000.
 
[  38.772463] CPU: Intel Genuine Intel(R) processor              1.00GHz stepping 08
 
[  38.772477] Checking 'hlt' instruction... OK.
 
[  38.785576] ACPI: Core revision 20060707
 
[  38.787890] ACPI: setting ELCR to 0200 (from 0000)
 
[  38.788479] NET: Registered protocol family 16
 
[  38.788580] ACPI: bus type pci registered
 
[  38.788595] PCI: BIOS Bug: MCFG area at f0000000 is not E820-reserved
 
[  38.788602] PCI: Not using MMCONFIG.
 
[  38.788877] PCI: Using configuration type 1
 
[  38.788883] Setting up standard PCI resources
 
[  38.788904] EFI: Failed to allocate res Runtime Service Code : 0xb178000-0xb19cfff
 
[  38.788914] EFI: Failed to allocate res Runtime Service Data : 0xb19d000-0xb1c7fff
 
[  38.788923] EFI: Failed to allocate res Runtime Service Data : 0xb1c8000-0xb1c8fff
 
[  38.791825] ACPI: Interpreter enabled
 
[  38.791833] ACPI: Using PIC for interrupt routing
 
[  38.792427] ACPI: PCI Root Bridge [PCI0] (0000:00)
 
[  38.792439] PCI: Probing PCI hardware (bus 00)
 
[  38.793832] PCI quirk: region 0400-047f claimed by ICH6 ACPI/GPIO/TCO
 
[  38.793842] PCI quirk: region 0500-053f claimed by ICH6 GPIO
 
[  38.794523] PCI: Transparent bridge - 0000:00:1e.0
 
[  38.794592] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
 
[  38.798978] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP01._PRT]
 
[  38.799918] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PCIB._PRT]
 
[  38.801431] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
 
[  38.801755] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled.
 
[  38.802075] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
 
[  38.802424] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled.
 
[  38.802740] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
 
[  38.803056] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *0, disabled.
 
[  38.803379] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
 
[   38.803695] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 7 11 12 14 15) *0, disabled.
 
[  38.804771] SCSI subsystem initialized
 
[  38.804805] libata version 2.00 loaded.
 
[  38.804872] usbcore: registered new interface driver usbfs
 
[  38.804914] usbcore: registered new interface driver hub
 
[  38.804960] usbcore: registered new device driver usb
 
[  38.804992] PCI: Using ACPI for IRQ routing
 
[  38.804999] PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a report
 
[  38.805775] PCI: Failed to allocate mem resource #6:20000@20000000 for 0000:01:00.0
 
[  38.805786] PCI: Bridge: 0000:00:01.0
 
[  38.805790]  IO window: disabled.
 
[  38.805798]  MEM window: 20000000-21ffffff
 
[  38.805806]  PREFETCH window: 10000000-1fffffff
 
[  38.805814] PCI: Bridge: 0000:00:1c.0
 
[  38.805818]  IO window: disabled.
 
[  38.805828]  MEM window: 22200000-222fffff
 
[  38.805837]  PREFETCH window: 22000000-220fffff
 
[  38.805848] PCI: Bridge: 0000:00:1e.0
 
[  38.805854]  IO window: 1000-1fff
 
[  38.805864]  MEM window: 22100000-221fffff
 
[  38.805872]  PREFETCH window: disabled.
 
[  38.806132] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 10
 
[  38.806139] PCI: setting IRQ 10 as level-triggered
 
[  38.806146] ACPI: PCI Interrupt 0000:00:01.0[A] -> Link [LNKA] -> GSI 10 (level, low) -> IRQ 10
 
[   38.806161] PCI: Setting latency timer of device 0000:00:01.0 to 64
 
[  38.806411] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11
 
[  38.806418] PCI: setting IRQ 11 as level-triggered
 
[  38.806424] ACPI: PCI Interrupt 0000:00:1c.0[A] -> Link [LNKB] -> GSI 11 (level, low) -> IRQ 11
 
[  38.806439] PCI: Setting latency timer of device 0000:00:1c.0 to 64
 
[  38.806456] PCI: Setting latency timer of device 0000:00:1e.0 to 64
 
[  38.806481] NET: Registered protocol family 2
 
[  38.838832] IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
 
[  38.838913] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
 
[  38.838963] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
 
[  38.838993] TCP: Hash tables configured (established 8192 bind 4096)
 
[   38.839000] TCP reno registered
 
[  38.849183] IA-32 Microcode Update Driver: v1.14a <tigran@aivazian.fsnet.co.uk>
 
[  38.849343] Total HugeTLB memory allocated, 0
 
[  38.849407] VFS: Disk quotas dquot_6.5.1
 
[  38.849431] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
 
[  38.849520] io scheduler noop registered
 
[  38.849527] io scheduler anticipatory registered (default)
 
[  38.849535] io scheduler deadline registered
 
[  38.849548] io scheduler cfq registered
 
[  38.849705] PCI: Setting latency timer of device 0000:00:01.0 to 64
 
[  38.849745] assign_interrupt_mode Found MSI capability
 
[  38.849753] Allocate Port Service[0000:00:01.0:pcie00]
 
[  38.849835] PCI: Setting latency timer of device 0000:00:1c.0 to 64
 
[  38.849898] assign_interrupt_mode Found MSI capability
 
[  38.849906] Allocate Port Service[0000:00:1c.0:pcie00]
 
[  38.849944] Allocate Port Service[0000:00:1c.0:pcie02]
 
[  38.850185] imacfb: framebuffer at 0x10030000, mapped to 0xd0880000, using 10800k, total 16384k
 
[  38.850196] imacfb: mode is 1440x900x32, linelength=6144, pages=1
 
[  38.850202] imacfb: scrolling: redraw
 
[  38.850209] imacfb: Truecolor: size=8:8:8:8, shift=24:16:8:0
 
[  38.972031] Console: switching to colour frame buffer device 180x56
 
[  39.083911] fb0: IMAC VGA frame buffer device
 
[  39.087092] Real Time Clock Driver v1.12ac
 
[  39.088295] RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
 
[  39.089517] 8139too Fast Ethernet driver 0.9.28
 
[  39.090166] PCI: Enabling device 0000:03:03.0 (0000 -> 0003)
 
[  39.091228] ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 10
 
[  39.092059] ACPI: PCI Interrupt 0000:03:03.0[A] -> Link [LNKE] -> GSI 10 (level, low) -> IRQ 10
 
[  39.093322] PCI: Setting latency timer of device 0000:03:03.0 to 64
 
[  39.094250] eth0: RealTek RTL8139 at 0x1000, 00:17:f2:f8:9e:18, IRQ 10
 
[  39.095153] eth0:  Identified 8139 chip type 'RTL-8100B/8139D'
 
[  39.095275] input: Macintosh mouse button emulation as /class/input/input0
 
[  39.096377] ata_piix 0000:00:1f.1: version 2.00ac7
 
[  39.096626] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 10
 
[  39.097422] ACPI: PCI Interrupt 0000:00:1f.1[A] -> Link [LNKC] -> GSI 10 (level, low) -> IRQ 10
 
[  39.098708] PCI: Setting latency timer of device 0000:00:1f.1 to 64
 
[  39.098753] ata1: PATA max UDMA/133 cmd 0x2058 ctl 0x2066 bmdma 0x2040 irq 10
 
[  39.099766] ata2: PATA max UDMA/133 cmd 0x2050 ctl 0x2062 bmdma 0x2048 irq 10
 
[  39.100761] scsi0 : ata_piix
 
[   39.263784] ATA: abnormal status 0x7F on port 0x205F
 
[  39.268770] ata1.00: ATA-7, max UDMA/33, 78140160 sectors: LBA48
 
[  39.269612] ata1.00: ata1: dev 0 multi count 16
 
[  39.278750] ata1.00: configured for UDMA/33
 
[  39.279333] scsi1 : ata_piix
 
[  39.442719] ATA: abnormal status 0x7F on port 0x2057
 
[  39.443522] scsi 0:0:0:0: Direct-Access    ATA      FUJITSU MHW2040A 0081 PQ: 0 ANSI: 5
 
[  39.444744] SCSI device sda: 78140160 512-byte hdwr sectors (40008 MB)
 
[  39.445668] sda: Write Protect is off
 
[  39.446176] sda: Mode Sense: 00 3a 00 00
 
[  39.446194] SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 
[  39.447473] SCSI device sda: 78140160 512-byte hdwr sectors (40008 MB)
 
[  39.448395] sda: Write Protect is off
 
[  39.482643] sda: Mode Sense: 00 3a 00 00
 
[  39.482662] SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 
[  39.517768]  sda:<7>spurious 8259A interrupt: IRQ7.
 
[  39.596810]  sda1 sda2 sda3
 
[  39.631490] sd 0:0:0:0: Attached scsi disk sda
 
[  39.665895] sd 0:0:0:0: Attached scsi generic sg0 type 0
 
[  39.700063] PCI: Enabling device 0000:00:1d.7 (0000 -> 0002)
 
[  39.734360] ACPI: PCI Interrupt Link [LNKH] enabled at IRQ 11
 
[  39.768360] ACPI: PCI Interrupt 0000:00:1d.7[A] -> Link [LNKH] -> GSI 11 (level, low) -> IRQ 11
 
[  39.802728] PCI: Setting latency timer of device 0000:00:1d.7 to 64
 
[  39.802734] ehci_hcd 0000:00:1d.7: EHCI Host Controller
 
[  39.836716] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1
 
[  39.871041] ehci_hcd 0000:00:1d.7: debug port 1
 
[  39.905030] PCI: cache line size of 32 is not supported by device 0000:00:1d.7
 
[  39.905040] ehci_hcd 0000:00:1d.7: irq 11, io mem 0x22305000
 
[  39.942735] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
 
[  39.976809] usb usb1: configuration #1 chosen from 1 choice
 
[  40.010966] hub 1-0:1.0: USB hub found
 
[  40.045016] hub 1-0:1.0: 8 ports detected
 
[  40.180796] USB Universal Host Controller Interface driver v3.0
 
[  40.215328] ACPI: PCI Interrupt 0000:00:1d.0[A] -> Link [LNKH] -> GSI 11 (level, low) -> IRQ 11
 
[  40.251198] PCI: Setting latency timer of device 0000:00:1d.0 to 64
 
[  40.251204] uhci_hcd 0000:00:1d.0: UHCI Host Controller
 
[  40.286701] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2
 
[  40.322144] uhci_hcd 0000:00:1d.0: irq 11, io base 0x00002020
 
[  40.357284] usb usb2: configuration #1 chosen from 1 choice
 
[  40.392345] hub 2-0:1.0: USB hub found
 
[  40.427216] hub 2-0:1.0: 2 ports detected
 
[  40.563730] Initializing USB Mass Storage driver...
 
[  40.690173] usb 1-1: new high speed USB device using ehci_hcd and address 2
 
[  41.722416] ehci_hcd 0000:00:1d.7: Unlink after no-IRQ?  Controller is probably using the wrong IRQ.
 
[  52.287961] usb 1-1: device not accepting address 2, error -110
 
[  52.427817] usb 1-1: new high speed USB device using ehci_hcd and address 3
 
[  63.992308] usb 1-1: device not accepting address 3, error -110
 
[  64.132164] usb 1-1: new high speed USB device using ehci_hcd and address 4
 
[  74.581162] usb 1-1: device not accepting address 4, error -110
 
[  74.721019] usb 1-1: new high speed USB device using ehci_hcd and address 5
 
[  85.170017] usb 1-1: device not accepting address 5, error -110
 
[  85.722770] usb 2-2: new low speed USB device using uhci_hcd and address 2
 
[  88.842936] usb 2-2: configuration #1 chosen from 1 choice
 
[  89.622232] usbcore: registered new interface driver usb-storage
 
[  89.657373] USB Mass Storage support registered.
 
[  89.692274] usbcore: registered new interface driver libusual
 
[  89.727421] usbcore: registered new interface driver hiddev
 
[  90.997303] input: Apple Computer, Inc. IR Receiver as /class/input/input1
 
[  91.032387] input: USB HID v1.11 Device [Apple Computer, Inc. IR Receiver] on usb-0000:00:1d.0-2
 
[  91.068366] usbcore: registered new interface driver usbhid
 
[  91.104431] drivers/usb/input/hid-core.c: v2.6:USB HID core driver
 
[  91.141641] i8042.c: No controller found.
 
[  91.177552] mice: PS/2 mouse device common for all mice
 
[  91.213411] device-mapper: ioctl: 4.11.0-ioctl (2006-10-12) initialised: dm-devel@redhat.com
 
[  91.279941] ip_tables: (C) 2000-2006 Netfilter Core Team
 
[  91.393468] TCP cubic registered
 
[  91.428955] NET: Registered protocol family 1
 
[  91.464351] NET: Registered protocol family 17
 
[  91.498849] Using IPI Shortcut mode
 
[  91.532685] ACPI: (supports S0 S4)
 
[  91.566452] Time: tsc clocksource has been installed.
 
[  91.973360] kjournald starting.  Commit interval 5 seconds
 
[  92.007750] EXT3-fs: mounted filesystem with ordered data mode.
 
[  92.042316] VFS: Mounted root (ext3 filesystem) readonly.
 
[  92.076968] Freeing unused kernel memory: 180k freed
 
[  98.406036] EXT3 FS on sda3, internal journal
 
[  99.204712] spurious 8259A interrupt: IRQ15.
 
[  99.599013] eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
 
[  106.074809] uhci_hcd 0000:00:1d.0: Unlink after no-IRQ?  Controller is probably using the wrong IRQ.
 
[  110.383484] usb 1-1: new high speed USB device using ehci_hcd and address 7
 
[  121.914675] usb 1-1: device not accepting address 7, error -110
 
[  122.061191] usb 1-1: new high speed USB device using ehci_hcd and address 8
 
[  133.592383] usb 1-1: device not accepting address 8, error -110
 
[  133.738899] usb 1-1: new high speed USB device using ehci_hcd and address 9
 
[  144.154600] usb 1-1: device not accepting address 9, error -110
 
[  144.301116] usb 1-1: new high speed USB device using ehci_hcd and address 10
 
[  154.716815] usb 1-1: device not accepting address 10, error -110
 
</pre>
 

Revision as of 13:02, 6 April 2007

Current Status

This page will is being reworked, and may be in flux. Feel free to add to it-- but at certain times it may be locked, and merged with the offline page.

Our overall focus will now be geared towards working with gimli to extend his Linux efforts on the AppleTV

  • A solution for booting any non-Apple EFI executables has not been discovered as of this writing.

A secondary, yet important focus will be providing information to enable alternative non-Apple bootloaders, and methods that do not require MacOS X

AwkwardTV Linux Project

Many of us would like to see a minimal source distribution, targeted for AppleTV and utilizing the Linux kernel, emerge with boot and kernel configs. Extras might include scripts for USB or disk image builds. Currently we will be working with gimli's Mach-O wrapper approach to bootstrapping, and this will require a MacOS X setup. His loader will require MacOS X to compile the Mach-O binary, and MacOS X will be required to manipulate the partitions to load Linux. The latter is due to incomplete HFS+ support as of kernel 2.6.20.

Please discuss your ideas on the #awkwardtv IRC Channel!

It bears mentioning that we recommend a complete backup of your original AppleTV drive before any experimentation. We have a wiki page dedicated to this subject. Remember, if you pipe the dd through gzip or bzip2, the virgin drive image created should only be ~2.5gb!

Hardware Support

Much of the AppleTV's hardware is supported natively under the Linux kernel. In this section, we will be expanding on the Linux driver details.

GeForce 7300 Go (NV40)

  • Official NVidia binary driver works without modification!
  • OSS NVidia driver works without modification
(==) NV(0): Write-combining range (0x10000000,0x4000000)
(II) NV(0): Using XFree86 Acceleration Architecture (XAA)
	Screen to screen bit blits
	Solid filled rectangles
	8x8 mono pattern filled rectangles
	Indirect CPU to Screen color expansion
	Solid Lines
	Scanline Image Writes
	Offscreen Pixmaps
	Setting up tile and stipple cache:
	32 128x128 slots
	32 256x256 slots
	16 512x512 slots
  • HDMI - working (DVI tested)
  • Component - not tested

Intel HD Audio

  • HDA-Intel driver recognized by default
  • Analogue RCA - not tested
  • Optical SPDIF - not tested

irDA interface

  • mactel-linux driver recognizes it, untested otherwise

Broadcom BCM94321MC wireless

  • NDISWrapper Windows drivers - working

Our components wiki has further information about the specific chips involved.

Barebones Distro Notes

Our preferred base distrubutions:

There are a few Linux distributions specialized for Media Center usage:

Some useful components:

We would prefer a lightweight X alternative or optimized/minimal X11 build. Note: KDrive is framebuffer only.