[bug#34978] Enable support for veyron chrombooks

Message ID 87wokogngm.fsf@ponder
State Accepted
Headers show
Series [bug#34978] Enable support for veyron chrombooks | expand

Checks

Context Check Description
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed
cbaines/applying patch fail Apply failed

Commit Message

Vagrant Cascadian March 24, 2019, 6:02 p.m. UTC
X-Debbugs-Cc: Timothy Sample <samplet@ngyro.com>

Attached is a patch series that adds a linux-libre kernel variant for
"veyron" type chromebooks, tested on an Asus-C201
(a.k.a. veyron-speedy), and corresponding support for installing the
kernel so that the "depthcharge" bootloader can boot it, and an example
system config used on the veyron-speedy. It may also work on other
veyron models; they are untested.

I've taken the WIP patch that Timothy Sample proposed and split it into
two patches (one for the bootloader support, and one for the example
system config slightly adjusted for the new kernel package name), and
dropped the prawnos kernel, though the linux-libre-arm-veyrong kernel
config is largely based on the prawnos kernel config. The thread on
guix-devel describes more of the background:

  https://lists.gnu.org/archive/html/guix-devel/2019-03/msg00053.html

Big thanks to Timothy for the WIP patches that made it possible to get
this far!


Caveats:

* The kernel patch introduces kernel-config-veyron, which should
  eventually get refactored into kernel-config directly.

* It would be much preferable to figure out how to just use linux-libre
  without a separate kernel variant, but I've been unable to figure out
  the right combination of options at this point.

* Xorg works, although so slowly as to be almost unusable. The
  framebuffer console works quite well, so not sure why X is *so* much
  slower. Might be configuration options to improve that.

* dm_crypt "works" briefly, but hangs the device-mapper device after
  brief use.

* Sometimes stalls out indefinitely in the initrd after "loading
  modules..." ... keyboard stays responsive in the sense that you can
  hit enter and it scrolls the screen one line.


That said, it's a decent fairly affordable and portable Guix System,
free software all the way down to the firmware (if you install libreboot
yourself).


live well,
  vagrant

Comments

Vagrant Cascadian March 24, 2019, 6:24 p.m. UTC | #1
On 2019-03-24, Vagrant Cascadian wrote:
> Attached is a patch series that adds a linux-libre kernel variant for
> "veyron" type chromebooks, tested on an Asus-C201
> (a.k.a. veyron-speedy), and corresponding support for installing the
> kernel so that the "depthcharge" bootloader can boot it, and an example
> system config used on the veyron-speedy. It may also work on other
> veyron models; they are untested.

A bonus caveat:

* currently u-boot-tools and tdb fail tests on armhf; but those should
  probably be their own bugs...


live well,
  vagrant
Vagrant Cascadian March 26, 2019, 10:50 p.m. UTC | #2
On 2019-03-24, Vagrant Cascadian <vagrant@debian.org> wrote:
> On 2019-03-24, Vagrant Cascadian wrote:
>> Attached is a patch series that adds a linux-libre kernel variant for
>> "veyron" type chromebooks, tested on an Asus-C201
>> (a.k.a. veyron-speedy), and corresponding support for installing the
>> kernel so that the "depthcharge" bootloader can boot it, and an example
>> system config used on the veyron-speedy. It may also work on other
>> veyron models; they are untested.
>
> A bonus caveat:
>
> * currently u-boot-tools and tdb fail tests on armhf; but those should
>   probably be their own bugs...

"guix system reconfigure" works just fine when done from a checkout
(e.g. ./pre-inst-env guix system reconfigure ...), but unfortunately, if
I guix pull the very same commit:

  $ guix system reconfigure /home/vagrant/src/config/asus-c201-spdygx.scm
  guix system: error: failed to load '/home/vagrant/src/config/asus-c201-spdygx.scm':
  ice-9/boot-9.scm:2803:6: In procedure resolve-interface:
  no code for module (gnu bootloader depthcharge)

How could that happen?


live well,
  vagrant
Efraim Flashner March 27, 2019, 9:24 a.m. UTC | #3
On Tue, Mar 26, 2019 at 03:50:24PM -0700, Vagrant Cascadian wrote:
> On 2019-03-24, Vagrant Cascadian <vagrant@debian.org> wrote:
> > On 2019-03-24, Vagrant Cascadian wrote:
> >> Attached is a patch series that adds a linux-libre kernel variant for
> >> "veyron" type chromebooks, tested on an Asus-C201
> >> (a.k.a. veyron-speedy), and corresponding support for installing the
> >> kernel so that the "depthcharge" bootloader can boot it, and an example
> >> system config used on the veyron-speedy. It may also work on other
> >> veyron models; they are untested.
> >
> > A bonus caveat:
> >
> > * currently u-boot-tools and tdb fail tests on armhf; but those should
> >   probably be their own bugs...
> 
> "guix system reconfigure" works just fine when done from a checkout
> (e.g. ./pre-inst-env guix system reconfigure ...), but unfortunately, if
> I guix pull the very same commit:
> 
>   $ guix system reconfigure /home/vagrant/src/config/asus-c201-spdygx.scm
>   guix system: error: failed to load '/home/vagrant/src/config/asus-c201-spdygx.scm':
>   ice-9/boot-9.scm:2803:6: In procedure resolve-interface:
>   no code for module (gnu bootloader depthcharge)
> 
> How could that happen?
> 

You might need to add the new (non guix-package-*) files to Makefile.am
too.
Vagrant Cascadian March 27, 2019, 3:14 p.m. UTC | #4
On 2019-03-27, Efraim Flashner wrote:
> On Tue, Mar 26, 2019 at 03:50:24PM -0700, Vagrant Cascadian wrote:
>> On 2019-03-24, Vagrant Cascadian <vagrant@debian.org> wrote:
>> > On 2019-03-24, Vagrant Cascadian wrote:
>> >> Attached is a patch series that adds a linux-libre kernel variant for
>> >> "veyron" type chromebooks, tested on an Asus-C201
>> >> (a.k.a. veyron-speedy), and corresponding support for installing the
>> >> kernel so that the "depthcharge" bootloader can boot it, and an example
>> >> system config used on the veyron-speedy. It may also work on other
>> >> veyron models; they are untested.
...
>> "guix system reconfigure" works just fine when done from a checkout
>> (e.g. ./pre-inst-env guix system reconfigure ...), but unfortunately, if
>> I guix pull the very same commit:
>> 
>>   $ guix system reconfigure /home/vagrant/src/config/asus-c201-spdygx.scm
>>   guix system: error: failed to load '/home/vagrant/src/config/asus-c201-spdygx.scm':
>>   ice-9/boot-9.scm:2803:6: In procedure resolve-interface:
>>   no code for module (gnu bootloader depthcharge)
>> 
>> How could that happen?
>
> You might need to add the new (non guix-package-*) files to Makefile.am
> too.

None of the other gnu/bootloader/* are added in Makefile.am. It was
added to gnu/local.mk, just like the other bootloaders; This is why I'm
so perplexed... the depthcharge patch mimics the entries for the other
bootloaders, works with ./pre-inst-env, but not when using guix pull to
pull the commit.


live well,
  vagrant
Ludovic Courtès April 3, 2019, 4:26 p.m. UTC | #5
Hello!

Vagrant Cascadian <vagrant@debian.org> skribis:

> I've taken the WIP patch that Timothy Sample proposed and split it into
> two patches (one for the bootloader support, and one for the example
> system config slightly adjusted for the new kernel package name), and
> dropped the prawnos kernel, though the linux-libre-arm-veyrong kernel
> config is largely based on the prawnos kernel config. The thread on
> guix-devel describes more of the background:
>
>   https://lists.gnu.org/archive/html/guix-devel/2019-03/msg00053.html
>
> Big thanks to Timothy for the WIP patches that made it possible to get
> this far!

Neat!  I’ve applied all three patches.

I’ve also followed up by a commit that fixes the problem you mentioned,
namely that (gnu bootloader depthcharge) wouldn’t be included in what
‘guix pull’ provides.

Could you add a sentence or two in doc/guix.texi, under “Bootloader
Configuration”, to mention Depthcharge next to U-Boot?

BTW, if U-Boot and Depthcharge are able to install custom keymaps, it’d
be nice to implement that support like commit
8d058e7b1b1a409d3d9cc29c5650a98db4e78783 does for GRUB.

Thanks Vagrant & Timothy!

Ludo’.
Danny Milosavljevic April 3, 2019, 4:59 p.m. UTC | #6
> BTW, if U-Boot and Depthcharge are able to install custom keymaps, it’d
> be nice to implement that support like commit
> 8d058e7b1b1a409d3d9cc29c5650a98db4e78783 does for GRUB.

Heh, I wish U-Boot did that, but it really doesn't:

/* Translate the scancode in ASCII */
static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
                                unsigned char modifier, int pressed)
{
        uint8_t keycode = 0;

        /* Key released */
        if (pressed == 0) {
                data->repeat_delay = 0;
                return 0;
        }

        if (pressed == 2) {
                data->repeat_delay++;
                if (data->repeat_delay < REPEAT_DELAY)
                        return 0;

                data->repeat_delay = REPEAT_DELAY;
        }

        /* Alphanumeric values */
        if ((scancode > 3) && (scancode <= 0x1d)) {
                keycode = scancode - 4 + 'a';

                if (data->flags & USB_KBD_CAPSLOCK)
                        keycode &= ~CAPITAL_MASK;

                if (modifier & (LEFT_SHIFT | RIGHT_SHIFT)) {
                        /* Handle CAPSLock + Shift pressed simultaneously */
                        if (keycode & CAPITAL_MASK)
                                keycode &= ~CAPITAL_MASK;
                        else
                                keycode |= CAPITAL_MASK;
                }
        }

        if ((scancode > 0x1d) && (scancode < 0x39)) {
                /* Shift pressed */
                if (modifier & (LEFT_SHIFT | RIGHT_SHIFT))
                        keycode = usb_kbd_numkey_shifted[scancode - 0x1e];
                else
                        keycode = usb_kbd_numkey[scancode - 0x1e];
        }

        /* Arrow keys */
        if ((scancode >= 0x4f) && (scancode <= 0x52))
                keycode = usb_kbd_arrow[scancode - 0x4f];

        /* Numeric keypad */
        if ((scancode >= 0x54) && (scancode <= 0x67))
                keycode = usb_kbd_num_keypad[scancode - 0x54];

        if (data->flags & USB_KBD_CTRL)
                keycode = scancode - 0x3;

        if (pressed == 1) {
                if (scancode == NUM_LOCK) {
                        data->flags ^= USB_KBD_NUMLOCK;
                        return 1;
                }

                if (scancode == CAPS_LOCK) {
                        data->flags ^= USB_KBD_CAPSLOCK;
                        return 1;
                }
                if (scancode == SCROLL_LOCK) {
                        data->flags ^= USB_KBD_SCROLLLOCK;
                        return 1;
                }
        }

        /* Report keycode if any */
        if (keycode) {
                debug("%c", keycode);
                usb_kbd_put_queue(data, keycode);
        }

        return 0;
}

Patch

From ae4e8d69cdbc4f7d2b006a83ce3498801cdfe17b Mon Sep 17 00:00:00 2001
From: Timothy Sample <samplet@ngyro.com>
Date: Mon, 4 Mar 2019 09:52:49 -0500
Subject: [PATCH 3/3] gnu: Add example system configuration for asus-c201.

* gnu/system/examples/asus-c201.tmpl: New file.
---
 gnu/system/examples/asus-c201.tmpl | 60 ++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 gnu/system/examples/asus-c201.tmpl

diff --git a/gnu/system/examples/asus-c201.tmpl b/gnu/system/examples/asus-c201.tmpl
new file mode 100644
index 0000000000..098958f4a2
--- /dev/null
+++ b/gnu/system/examples/asus-c201.tmpl
@@ -0,0 +1,60 @@ 
+;; This is an operating system configuration template
+;; for a "bare bones" setup for an ASUS C201PA.
+
+(use-modules (gnu) (gnu bootloader depthcharge))
+(use-service-modules networking ssh)
+(use-package-modules linux screen)
+
+(operating-system
+  (host-name "komputilo")
+  (timezone "Europe/Berlin")
+  (locale "en_US.utf8")
+
+  ;; Assuming /dev/mmcblk0p1 is the kernel partition, and
+  ;; "my-root" is the label of the target root file system.
+  (bootloader (bootloader-configuration
+                (bootloader depthcharge-bootloader)
+                (target "/dev/mmcblk0p1")))
+
+  ;; The ASUS C201PA requires a very particular kernel to boot,
+  ;; as well as the following arguments.
+  (kernel linux-libre-arm-veyron)
+  (kernel-arguments '("console=tty1"))
+
+  ;; We do not need any special modules for initrd, and the
+  ;; PrawnOS kernel does not include many of the normal ones.
+  (initrd-modules '())
+
+  (file-systems (cons (file-system
+                        (device (file-system-label "my-root"))
+                        (mount-point "/")
+                        (type "ext4"))
+                      %base-file-systems))
+
+  ;; This is where user accounts are specified.  The "root"
+  ;; account is implicit, and is initially created with the
+  ;; empty password.
+  (users (cons (user-account
+                (name "alice")
+                (comment "Bob's sister")
+                (group "users")
+
+                ;; Adding the account to the "wheel" group
+                ;; makes it a sudoer.  Adding it to "audio"
+                ;; and "video" allows the user to play sound
+                ;; and access the webcam.
+                (supplementary-groups '("wheel"
+                                        "audio" "video"))
+                (home-directory "/home/alice"))
+               %base-user-accounts))
+
+  ;; Globally-installed packages.
+  (packages (cons screen %base-packages))
+
+  ;; Add services to the baseline: a DHCP client and
+  ;; an SSH server.
+  (services (append (list (service dhcp-client-service-type)
+                          (service openssh-service-type
+                                   (openssh-configuration
+                                    (port-number 2222))))
+                    %base-services)))
-- 
2.21.0