Difference between revisions of "Talk:Sugar Creation Kit/sck/Advanced Topics"

From Sugar Labs
Jump to navigation Jump to search
(SDHC class 4, 4 GB)
m (delete entry)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
  
:Note:   This page copied to its own page [[Sugar_Creation_Kit/sck/Advanced_Topics_ARM_RPi]]--[[User:Satellit|Satellit]] 06:53, 25 June 2012 (EDT)
+
==Ubuntu on Chromebook==
Sugar on a Raspberry pi is "functional" and testable by children (in progress).
+
*Copied from: https://plus.google.com/109993695638569781190/posts/b2fazijJppZ
 +
Olof Johansson
 +
Oct 28, 2012 (edited) -  Public
 +
[edited to fix some typos and the cgpt commandline and setting sector alignment]
  
== Test report ==
+
Sunday night is "Hack your Chromebook" time!                                                                                                                                                                     
  
Product of the command
+
A word of caution: be careful, there are some ways in which you can mess up your system below, in particular the steps that partitions and writes data to the SD card. If you're unsure of what you're doing, you're better off waiting until someone refines the instructions and makes them more user friendly.
    sweets  sdk/sugar:emulator
 
Raspberry pi, running OS from  http://www.raspbian.org/ (pisces image) on a SanDisk 4 GB, class 4, SDHC card.
 
  
Sweets, following these instructions [[Platform_Team/Guide/Sugar_via_Sweets]]
+
I got Ubuntu installed on my ARM Chromebook tonight. Here's a messy brain dump of what I did. The system was already in devmode when I started (see http://goo.gl/TSZxs for info on how to achieve that). I also already had a tarball of an Ubuntu filesystem, created with the "rootstock" tool. [edit: you can use the distributed ubuntu-core tarball directly from ubuntu as well, and then install additional packages on top]
  
From my computer
+
Get an SD card, insert it in a reader on your Ubuntu PC (mine was a 16GB card that ended up at /dev/sdd on the PC, so the below reflects that):
::Build: Debian GNU/Linux testing/unstable
 
::Sugar: 0.94.1
 
  
All Function keys, F1 to 6, work fine
+
First, the SD card needs a GPT partition table. I'm lazy and mixed tools here to make it easy for myself. First, I created the blank partition table in parted:
  
All Views and avatars seen correctly, without error.
+
# sudo parted /dev/sdd
 +
(parted) mktable gpt
 +
(parted) quit
  
Software Updates fully functional.
+
Then edit it with gdisk (apt-get install gdisk), since the syntax is close to what I am used with regular cfdisk. The first part sets the sector alignment to 4M based on the recommendation from Arnd in the comments below:
  
Calculate.activity  v.40        Starts and Resumes
+
sudo gdisk /dev/sdd
 +
x
 +
l
 +
8192
 +
m
  
Chat.activity        v.77      Starts and Resumes
+
n
 +
1
 +
<enter>
 +
+16M
 +
7f00    (ChromeOS kernel)
  
HorseGame.activity      v.4    Starts and Resumes
+
n
 +
2
 +
<enter>
 +
+16M
 +
7f00
  
IRC.activity        v.10        Starts and Resumes
+
n
 +
3
 +
<enter>
 +
<enter>
 +
<enter>
  
Log                v.29        Starts and Resumes
+
This creates three partitions; two kernel ones and one for the root filesystem. I wanted two kernel partitions to make it easier to tinker with the kernel and have a fallback to a known-good kernel in case the one being tested fails.
  
Labyrinth.activity  v.12        Starts and Resumes
 
  
Maze.activity          v.21    Starts and Resumes
+
Then, create a filesystem on the root partition:
  
Memorize.activity      v.4    Starts and Resumes
+
sudo mkfs.ext4 /dev/sdd3
  
Moon.activity          v.14    Starts and Resumes
+
mount /dev/sdd3 somewhere and extract your rootstock filesystem to it:
 +
sudo mount /dev/sdd3 /mnt
 +
cd /mnt
 +
sudo tar xvpf /work/rootstock/armel.tar.gz
  
Pippy.activity          v.49    Starts and Resumes
+
Then, since we are going to use the same kernel as we boot Chrome
 +
OS with, copy over the contents from /lib/modules and /lib/firmware
 +
from your running system into the same location on the SD card
 +
(i.e. /mnt/lib/modules /mnt/lib/firmware). I did it by creating a tarball
 +
on the Chrome OS machine and scp:ing it over to my PC. I'll leave the
 +
details as an exercise for the reader here.
  
SprayPlay.activity      v.2    Starts and Resumes
+
Now the only remaining piece is to put an actual kernel on the kernel
 +
partitions of the SD card.
  
SugarCommander.activity v.8    Starts and Resumes
+
This is something I did on my Chromebook system directly. Be VERY careful here, mmcblk1 and mmcblk0 are very easy to mistype, and you won't like the results from doing it (I nuked my stateful partition by mistake once when I went through this because I dd:d a kernel to mmcblk0p1 instead of mmcblk1p1).
  
Terminal.activity      v.40    Starts and Resumes
+
The kernel command line is going to be different from what you use for
 +
Chrome OS, so you'll need to repack the kernel blob manually first. This
 +
is what I did:
  
Turtle Art              v.149  Starts and Resumes
+
cd /tmp
 +
echo "console=tty1 debug verbose root=/dev/mmcblk1p3 rootwait rw" > /tmp/config
 +
vbutil_kernel --pack /tmp/newkern --keyblock /usr/share/vboot/devkeys/kernel.keyblock --version 1 --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk --config=/tmp/config --vmlinuz /boot/vmlinuz-3.4.0 --arch arm
  
TurtleConfusion.activity v.10    Starts and Resumes
+
Then I moved the SD card to the Chromebook, and wrote out the kernel:
  
Surf.activity          v.115          Reports, Failed to start.
+
dd if=/tmp/newkern of=/dev/mmcblk1p1
 +
dd if=/tmp/newkern of=/dev/mmcblk1p2
  
ImportError: No module named webkit
+
Now, enable boot from "USB" (which includes SD card on these systems):
To fix tried:
+
crossystem dev_boot_usb=1
sudo apt-get install libwebkitgtk-3.0-dev
 
which added
 
gir1.2-javascriptcoregtk-3.0 gir1.2-soup-2.4 gir1.2-webkit-3.0 libgtk-3-dev libjavascriptcoregtk-3.0-dev libsoup2.4-dev libwebkitgtk-3.0-dev libxml2-dev
 
But error persists:
 
ImportError: No module named webkit
 
  
Earlier in the process, to fix:
+
Final step is to mark the partitions on the SD card as known good so
 +
that the firmware will try to boot them:
  
ImportError: No module named vte
+
cgpt add -i 1 -S 1 -T 5 -P 10 -l KERN-A /dev/mmcblk1
ImportError: No module named gst
+
cgpt add -i 2 -S 1 -T 5 -P 5 -l KERN-B /dev/mmcblk1
ImportError: No module named pygame
 
  
sudo apt-get install python-vte python-gst0.10 python-pygame
+
I.e. mark both as successful, first partition as priority 10, second
 +
as priority 5. I don't think tries are technically needed here since
 +
the partition is already marked as successful, but I included it by
 +
habit. Same with the label names, they shouldn't be needed.
  
This page might merit its own page. Will a Talk:page move successfully to its own page, preserving history? Suggestions for location?
+
Then reboot. At the devmode screen, you type ctrl-u to load the kernel
--[[User:Inkyfingers|Inkyfingers]] 06:35, 25 June 2012 (EDT)
+
and boot from the SD card.
  
== Help with install on IRC ==
+
After a few seconds, you'll get the kernel log on the console, followed by
*from IRC with permission--[[User:Satellit|Satellit]] 08:01, 22 June 2012 (EDT)
+
(depending on what you have on your root filesystem) a login prompt. I
*Based on these instructions: http://wiki.sugarlabs.org/go/Platform_Team/Guide/Sugar_via_Sweets
+
had a very minimal install without X-windows first, so I just got a text login prompt. I later installed ubuntu-desktop, and it will boot up to login prompt and let you login with an UI environment. The trackpad isn't behaving perfectly though, so there's some tuning to be done.
<inkyfingers> Image from: http://www.raspbian.org/
+
 
<inkyfingers> is Debian Hard Float (armhf) for RPi
+
I'm sure there will be others more than happy to carry the flag on getting this going nice and smoothly from here though. I'm also looking forward to getting reports of other distros being functional, so bring them on!
<inkyfingers> Is armhf likely to be a problem for <sweets>?
 
<alsroot> inkyfingers: I didn't try to run sugar on arm. OLPC people support it but I dunno do they use sugar directly from upstream brunches (what was used for sweets (not SD)) or not
 
<inkyfingers> #644010 is now marked fixed - so wheezy seems fine to me with python 2.7 - I believe eliminated.
 
<alsroot> btw, whats exact sugar version you are running on Raspberry?
 
<inkyfingers> Ok tried sdk/sugar and dextrose/
 
<inkyfingers> dextrose marginally more success.
 
<inkyfingers> * Booting Rpi ... will try to ssh for notes . I tested Sugar 0.88 and 0.94
 
...
 
<inkyfingers>  raspbian@pisces:~$ sweets  dextrose/sugar:emulator
 
<inkyfingers> Xephyr on :30.0
 
<inkyfingers> About my computer:
 
<inkyfingers> Build: Debian GNU/Linux testing/unstable
 
<inkyfingers> Sugar: 0.88.1
 
...
 
<inkyfingers> I will try to write only about sweets  dextrose/sugar:emulator ...
 
<inkyfingers> F1 to F6 all fine ok
 
<alsroot> thats fine..
 
<alsroot> though, in my mind SD, finally, is more useful way to start sugar itself. but unfortunately, it does not [yet]support arm
 
<inkyfingers> I could see no avatars in F1 in dextrose <seen fine in sdk, 0.94>
 
<inkyfingers> I have no Activities in F3
 
<alsroot> for activities, you can unzip some of them (that are pure python) to ~/Activities
 
<inkyfingers> That would be a good next step.
 
<inkyfingers> Two usb ports are used by mouse and kbd. I will prepare a USB stick next and try that out.
 
<alsroot> inkyfingers: btw, how long it took to build sugar via "sweets" command?
 
<inkyfingers> Over 8 or 9 mins of 100% CPU
 
<inkyfingers> sorry ssh into my rubbish notes is hard !! I keep not finding what I want!
 
<inkyfingers> raspbian@pisces:~$ sweets  sdk/sugar:emulator
 
<inkyfingers> -- Solve sdk/sugar-artwork for building
 
<inkyfingers> -- Solve sdk/sugar-base for building
 
<inkyfingers> -- Solve sdk/sugar-toolkit for building
 
<inkyfingers> -- Solve sdk/sugar-datastore for building
 
<inkyfingers> -- Solve sdk/telepathy-mission-control for building
 
<inkyfingers> -- Solve sdk/sugar for building
 
<inkyfingers> -- Build sdk/sugar-artwork (0.94.0)
 
<inkyfingers> -- Build sdk/sugar-base (0.94.0)
 
<inkyfingers> -- Build sdk/sugar-toolkit (0.94.0)
 
<inkyfingers> -- Build sdk/sugar-datastore (0.94.0)
 
<inkyfingers> -- Build sdk/telepathy-mission-control (5.7.1)
 
<inkyfingers> -- Build sdk/sugar (0.94.1)
 
<inkyfingers> this made me think Activities should be on-board?
 
<alsroot> inkyfingers: nope, this way you can't install activities
 
<alsroot> dunno will Browse work on or not (to open ASLO), but just download .xo files to unzip them to ~/Activities
 
<inkyfingers> So that trace was just my first successful launch
 
<inkyfingers> df -h (before that command)
 
<inkyfingers> Filesystem      Size  Used Avail Use% Mounted on
 
<inkyfingers> rootfs          3.3G  2.1G  1.1G  68% /
 
<inkyfingers> now
 
<inkyfingers> rootfs          3.3G  2.2G  985M  69% /
 

Latest revision as of 22:52, 28 October 2013

Ubuntu on Chromebook

Olof Johansson Oct 28, 2012 (edited) - Public [edited to fix some typos and the cgpt commandline and setting sector alignment]

Sunday night is "Hack your Chromebook" time!

A word of caution: be careful, there are some ways in which you can mess up your system below, in particular the steps that partitions and writes data to the SD card. If you're unsure of what you're doing, you're better off waiting until someone refines the instructions and makes them more user friendly.

I got Ubuntu installed on my ARM Chromebook tonight. Here's a messy brain dump of what I did. The system was already in devmode when I started (see http://goo.gl/TSZxs for info on how to achieve that). I also already had a tarball of an Ubuntu filesystem, created with the "rootstock" tool. [edit: you can use the distributed ubuntu-core tarball directly from ubuntu as well, and then install additional packages on top]

Get an SD card, insert it in a reader on your Ubuntu PC (mine was a 16GB card that ended up at /dev/sdd on the PC, so the below reflects that):

First, the SD card needs a GPT partition table. I'm lazy and mixed tools here to make it easy for myself. First, I created the blank partition table in parted:

  1. sudo parted /dev/sdd

(parted) mktable gpt (parted) quit

Then edit it with gdisk (apt-get install gdisk), since the syntax is close to what I am used with regular cfdisk. The first part sets the sector alignment to 4M based on the recommendation from Arnd in the comments below:

sudo gdisk /dev/sdd x l 8192 m

n 1 <enter> +16M 7f00 (ChromeOS kernel)

n 2 <enter> +16M 7f00

n 3 <enter> <enter> <enter>

This creates three partitions; two kernel ones and one for the root filesystem. I wanted two kernel partitions to make it easier to tinker with the kernel and have a fallback to a known-good kernel in case the one being tested fails.


Then, create a filesystem on the root partition:

sudo mkfs.ext4 /dev/sdd3

mount /dev/sdd3 somewhere and extract your rootstock filesystem to it: sudo mount /dev/sdd3 /mnt cd /mnt sudo tar xvpf /work/rootstock/armel.tar.gz

Then, since we are going to use the same kernel as we boot Chrome OS with, copy over the contents from /lib/modules and /lib/firmware from your running system into the same location on the SD card (i.e. /mnt/lib/modules /mnt/lib/firmware). I did it by creating a tarball on the Chrome OS machine and scp:ing it over to my PC. I'll leave the details as an exercise for the reader here.

Now the only remaining piece is to put an actual kernel on the kernel partitions of the SD card.

This is something I did on my Chromebook system directly. Be VERY careful here, mmcblk1 and mmcblk0 are very easy to mistype, and you won't like the results from doing it (I nuked my stateful partition by mistake once when I went through this because I dd:d a kernel to mmcblk0p1 instead of mmcblk1p1).

The kernel command line is going to be different from what you use for Chrome OS, so you'll need to repack the kernel blob manually first. This is what I did:

cd /tmp echo "console=tty1 debug verbose root=/dev/mmcblk1p3 rootwait rw" > /tmp/config vbutil_kernel --pack /tmp/newkern --keyblock /usr/share/vboot/devkeys/kernel.keyblock --version 1 --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk --config=/tmp/config --vmlinuz /boot/vmlinuz-3.4.0 --arch arm

Then I moved the SD card to the Chromebook, and wrote out the kernel:

dd if=/tmp/newkern of=/dev/mmcblk1p1 dd if=/tmp/newkern of=/dev/mmcblk1p2

Now, enable boot from "USB" (which includes SD card on these systems): crossystem dev_boot_usb=1

Final step is to mark the partitions on the SD card as known good so that the firmware will try to boot them:

cgpt add -i 1 -S 1 -T 5 -P 10 -l KERN-A /dev/mmcblk1 cgpt add -i 2 -S 1 -T 5 -P 5 -l KERN-B /dev/mmcblk1

I.e. mark both as successful, first partition as priority 10, second as priority 5. I don't think tries are technically needed here since the partition is already marked as successful, but I included it by habit. Same with the label names, they shouldn't be needed.

Then reboot. At the devmode screen, you type ctrl-u to load the kernel and boot from the SD card.

After a few seconds, you'll get the kernel log on the console, followed by (depending on what you have on your root filesystem) a login prompt. I had a very minimal install without X-windows first, so I just got a text login prompt. I later installed ubuntu-desktop, and it will boot up to login prompt and let you login with an UI environment. The trackpad isn't behaving perfectly though, so there's some tuning to be done.

I'm sure there will be others more than happy to carry the flag on getting this going nice and smoothly from here though. I'm also looking forward to getting reports of other distros being functional, so bring them on!