Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== FreeBSD on Samsung Chromebook "SNOW" model XE303C12 ===== The Chromebook is an affordable computer powered by Samsung Exynos 5250 (ARMv7 Cortex A15) System-On-Chip ==== Supported Device Drivers ==== * Framebuffer * Keyboard * USB 2.0 * USB 3.0 ==== Known Bugs/Limitations ==== * [[/WiFi|WiFi]] is not supported * Sound is not supported * Power management is not supported, resulting in poor battery life * Only Powered USB 2.0 hubs are supported * Keyboard polling mode is not implemented and the keyboard will work unpredictably at the mountroot promt or in KDB * Keyboard left arrow key does not work predictably at the command line * Kernel will log "Spurious interrupt detected" (Switch to another console) * SD Slot is not supported but can be used for kernel boot * %%FreeBSD%% HEAD may constantly log "chrome_ec0: i2c transfer returned 4" ==== Synopsis ==== %%FreeBSD%% ARM can be booted on the Chromebook "SNOW" using a specially-configured USB boot device that contains a U-Boot boot loader partition, an msdos %%FreeBSD%% kernel partition and a UFS root partition A true 4GB USB device will have room for the %%FreeBSD%% sources and an object directory and will build the default CHROMEBOOK-SNOW kernel in about 14 minutes, 30 seconds An SD Card can be used for the U-Boot and kernel partitions but is not supported by %%FreeBSD%% for the %%FreeBSD%% root. SD Card boot has proved useful for USB debugging ==== Source Checkout ==== %%FreeBSD%% SVN tag 269385 is known to work <code> # svnlite co http://svn.freebsd.org/base/head@269385 /usr/src </code> ==== Kernel Configuration ==== The default /usr/src/sys/arm/conf/CHROMEBOOK-SNOW kernel configuration file requires the following additional options to support USB root boot: <code> nooptions ROOTDEVNAME options ROOTDEVNAME=\"ufs:/dev/da0p3\" </code> ==== Kernel and World Build ==== <code> # make TARGET_ARCH=armv6 KERNCONF=CHROMEBOOK-SNOW buildworld buildkernel </code> Use a -j jobs that is appropriate for your hardware ==== USB Device Partitioning ==== Change "da0" to match your attached USB device Warning: This will delete all data on the USB device <code> # gpart delete -i 1 da0 # gpart delete -i 2 da0 # gpart delete -i 3 da0 # gpart destroy da0 # dd if=/dev/zero of=/dev/da0 bs=1m count=32 # gpart create -s GPT da0 # gpart add -b 1m -s 15m -t \!fe3a2a5d-4f32-41a7-b725-accc3285a309 da0 # gpart add -b 17m -s 15m -t \!fe3a2a5d-4f32-41a7-b725-accc3285a309 da0 # gpart add -t freebsd-ufs da0 </code> You can optionally create a swap partition after the freebsd-ufs partition Sample output from a 3.7GB "4GB" device is: <code> # gpart show da0 => 34 7821245 da0 GPT (3.7G) 34 2014 - free - (1.0M) 2048 30720 1 !fe3a2a5d-4f32-41a7-b725-accc3285a309 (15M) 32768 2048 - free - (1.0M) 34816 30720 2 !fe3a2a5d-4f32-41a7-b725-accc3285a309 (15M) 65536 7755743 3 freebsd-ufs (3.7G) </code> ==== Populating the U-Boot Partition ==== <code> # fetch http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/nv_uboot-snow-simplefb.kpart.bz2 # bunzip2 nv_uboot-snow-simplefb.kpart.bz2 # dd if=nv_uboot-snow-simplefb.kpart of=/dev/da0p1 bs=1m </code> Also note: http://linux-exynos.org/dist/chromebook/nv_uboot/ ==== Populating the Kernel Partition ==== <code> # newfs_msdos /dev/da0p2 # mount_msdosfs /dev/da0p2 /mnt # cp /usr/obj/arm.armv6/usr/src/sys/CHROMEBOOK-SNOW/kernel.bin /mnt/ # umount /mnt </code> ==== Populating the Root Partition ==== <code> # newfs -U /dev/da0p3 # mount /dev/da0p3 /mnt # cd /usr/src/ # make TARGET_ARCH=armv6 DESTDIR=/mnt installworld distribution # echo "/dev/da0p3 / ufs rw,noatime 1 1" > /mnt/etc/fstab # vi /mnt/etc/ttys < Change ttyv0 thorough ttyv4 from "off" to "on" > # umount /mnt </code> You can optionally copy in your /usr/src and /usr/obj/ to the USB image prior to unmounting You may now remove the USB device and insert it into the USB 2.0 port (between the HDMI connector and USB 3.0 port on the Chromebook ==== Chromebook Commands ==== === Enable Developer Mode === The Chromebook must be placed in "Developer Mode" to enable USB/SD Card boot. This step only needs to be performed once WARNING: This will delete all personal data and settings on your Chromebook - Power the machine off using the Linux GUI or by holding down the Power button - Hold down ESC and Refresh (above the "4" key) keys, and press the Power button - This will enter Recovery mode. Press CTRL+D to enter Developer mode - Press Enter to confirm - You now see the "OS verification is OFF" screen. Press CTRL+D to continue - Wait approximately 5 minutes for the procedure to complete === Access the GNU/Linux Command Line === You will need the Chromebook's GNU/Linux command line for some steps - Power the machine on and either press CTRL+D at the "OS verification is OFF" screen or wait for the two tones - Change to the second virtual console by pressing CTRL+ALT and the "=>" button (above the "3" key) === Enable USB/SD Card Boot === This step only needs to be performed once from the GNU/Linux command line: <code> localhost login: root localhost ~ # crossystem dev_boot_usb=1 localhost ~ # reboot </code> To verify this setting: <code> localhost ~ # crossystem --all | grep dev_boot_usb localhost ~ # dev_boot_usb = 1 # Enable developer mode boot from USB/SD (writable) </code> === Restart === - Type 'reboot' at the GNU/Linux command line if available - Press the Refresh (above the "4" key) and Power keys === Power Off === - Click "Shut down" on the bottom left of the GNU/Linux GUI - Issue the GNU/Linux or %%FreeBSD%% shutdown command - Hold down the Power button ==== Mark the FreeBSD USB Device Bootable ==== This step must be performed on the GNU/Linux command line for every newly created USB or SD Card device For a USB device: <code> # cgpt add -P 12 -T 5 -S 1 -i 1 /dev/sda # reboot </code> To review the partition table: <code> cgpt show /dev/sda ... Attr: priority=12 tries=5 successful=1 ... </code> For an SD Card device: <code> # cgpt add -P 12 -T 5 -S 1 -i 1 /dev/mmcblk1 # reboot </code> To review the partition table: <code> cgpt show /dev/mmcbkl1 ... Attr: priority=12 tries=5 successful=1 ... </code> ==== Booting with U-Boot ==== - Insert your USB device if not inserted already - Power the machine on and press CTRL+U on the - Insert USB flash device to USB 2.0 port and insert SD card - Power on laptop and press CTRL+U at the "OS verification is OFF" screen. If it beeps at you, your USB/SD Card is not properly configured - In U-boot type: For a USB device: <code> SMDK5250 # usb start SMDK5250 # usb dev 0 SMDK5250 # fatload usb 0:2 0x40f00000 kernel.bin SMDK5250 # go 0x40f00000 </code> This can be saved with: <code> SMDK5250 # setenv bootcmd "usb start; usb dev 0; fatload usb 0:2 0x40f00000 kernel.bin; go 0x40f00000" SMDK5250 # saveenv SMDK5250 # boot </code> For an SD Card device: <code> SMDK5250 # mmc dev 1 SMDK5250 # mmc rescan 1 SMDK5250 # fatload mmc 1:2 0x40f00000 kernel.bin SMDK5250 # go 0x40f00000 </code> This can be saved with: <code> SMDK5250 # setenv bootcmd "mmc dev 1; mmc rescan 1; fatload mmc 1:2 0x40f00000 kernel.bin; go 0x40f00000" SMDK5250 # saveenv SMDK5250 # boot </code> If you have saved your U-Boot command, you can interrupt the autoboot by pressing any key ==== Useful information ==== Change GNU/Linux and %%FreeBSD%% Consoles: Hold down CTRL+ALT and press "=>" button (located above the "3" key). This is very useful when the console is flooded with "Spurious interrupt detected" messages Remember that the %%FreeBSD%% kernel is on /dev/da0p2 should you build a new kernel <code> # mount_msdosfs /dev/da0p2 /mnt # ls /mnt kernel.bin # cp /usr/obj/arm.armv6/usr/src/sys/CHROMEBOOK-SNOW/kernel.bin /mnt/ # umount /mnt </code> Chromebook information: http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook Chromebook partitioning information: http://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format#TOC-Partition-types Chromebook "snow", "peach pit" and "spring" models explained: http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices ===== Samsung Chromebook2 "PEACH PIT" model XE503C12 ===== This model has a Samsung Exynos 5420 (effectively quad-core) CPU with 3.5GB of usable RAM and a supported SDHC port The only changes to the above instructions are: - The kernel config to use is CHROMEBOOK-PEACH-PIT - The U-Boot firmware is available at http://linux-exynos.org/dist/chromebook/nv_uboot/nv_uboot-peach-pit.kpart ===== HP Chromebook 11 "SPRING" model 11-1101 ===== This model has a Samsung Exynos 5250 Dual 1.7 GHz CPU and 2GB RAM - The kernel config to use is CHROMEBOOK-SPRING - The U-Boot firmware is available at http://linux-exynos.org/dist/chromebook/nv_uboot/nv_uboot-spring.kpart arm/chromebook.txt Last modified: 2019/09/06 21:32by LorenzoSalvadore