Difference between revisions of "Linux"
(Created page with " == Current: Freemyipod Linux == We are working on supporting Samsung/S5L-based devices which have an MMU. Currently our main focus is the Nano 5G, and an experimental so...") |
(No difference)
|
Revision as of 21:26, 20 January 2023
Contents
Current: Freemyipod Linux
We are working on supporting Samsung/S5L-based devices which have an MMU. Currently our main focus is the Nano 5G, and an experimental source tree is available on github.com/freemyipod/linux.
User Guide
Not yet available, as the Linux port isn't yet practical to use. We have no storage drivers, no screen driver, no sound driver...
Developer Guide
If you're somewhat familiar with embedded Linux, you can get started on the Nano 5G by building wInd3x, U-Boot and the Kernel as described below. However, you will have to provide your own userland (eg. buildroot, archlinux arm, ... anything armv6 compatible) and either run it from an initramfs or over NFS. A serial cable is currently necessary to get everything running.
Build everything
These are not copy-paste instructions. You are expected to understand what's happening.'
You will need an arm-none-eabi- toolchain into your $PATH, eg. gcc-arm-embedded from your package manager.
First, wInd3x: this will be used to run u-boot.
$ git clone https://github.com/freemyipod/wInd3x $ cd wInd3x $ go build ./
Second, U-Boot:
$ git clone https://github.com/freemyipod/u-boot $ cd u-boot $ git checkout n5g-wip $ make nano5g_defconfig $ make CROSS_COMPILE=arm-none-eabi- u-boot.bin
Third, Linux:
$ git clone https://github.com/freemyipod/linux $ cd linux $ git checkout n5g-wip $ make ARCH=arm nano5g_defconfig $ make ARCH=arm CROSS_COMPILE=arm-none-eabi- -j 32 uImage
By this point, have a initramfs ready. If you wanna boot directly from nfs, edit CMDLINE in the kernel .config accordingly.
Finally, bundle together an u-boot image containing the kernel, your initramfs, and the device-tree (built by u-boot):
$ mkimage -A arm -C none -O linux -T multi -a 0x08000000 -e 0x08000000 -d arch/arm/boot/zImage:initramfs.gz:../u-boot/arch/arm/dts/s5l8730.dtb mImage
mImage is your combined image.
Running
Connect your Nano 5G in DFU mode.
Run u-boot using wInd3x:
$ ./wInd3x cfw run ../u-boot/u-boot.bin
This should start u-boot. Running this for the first time will take a while, as some bootloader stages need to be downloaded, decrypted and modified. Once it's done, over serial (baudrate 115200), you should now see:
U-Boot 2023.01-rc4-q3k-00056-g47f65730fa-dirty (Jan 01 1980 - 00:00:00 +0000) CPU: Samsung/Apple S5L8730 Model: Apple iPod Nano 5G DRAM: 64 MiB Core: 5 devices, 5 uclasses, devicetree: separate MMC: Loading Environment from nowhere... OK In: serial@3cc00000 Out: serial@3cc00000 Err: serial@3cc00000 Net: No ethernet found. =>
Tell u-boot to start a DFU gadget so that you can load your mImage:
=> dfu 0 ram 0
This will make a new USB device (05ac:2137) appear on your host. Use dfu-util to upload mImage:
dfu-util -d 05ac:2137 -D linux/mImage
Then, in the u-boot concole, as prompted, press Ctrl-C and then boot the mImage:
#DOWNLOAD ... OK Ctrl+C to exit ... => bootm ## Booting kernel from Legacy Image at 08000000 ... ... Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 6.2.0-rc4-00476-g4c4af4d7e53c (q3k@mimeomia) (arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release), GNU ld (GNU Arm Embedded Toolchain 10.3-2021.10) 2.36.1.20210621) #70 Fri Jan 20 18:02:56 CET 2023 ...
If everything goes well, the kernel should boot up and attempt to mount a rootfs. It's up to you to get this part working, at least until we streamline the process. The USB CDC EEM ethernet gadget should also appear on your host (probably as usb0, or some long systemd predictable name). The other end will be visible as 'usb0' on the device.
Now go on and have a go at reverse-engineering some peripherals! :)
Legacy: iPodLinux
The iPodLinux project supports all the PortalPlayer based iPods: iPod 1G-4G, Photo/Color, Video/5G/5.5G, Mini, iPod Nano 1G. It is currently semi-abandoned, and uses a very old ucLinux kernel build.