chromiumos
chromiumos copied to clipboard
Chrome OS w/ Android + Vulkan works on regular PC
Has anyone here tried to run the official Chrome OS images work, rather than Chromium OS, which lacks Android, Google Assistant, and Flash support?
It appears with some fiddling around, it's possible to get the genuine Chrome OS images to work on an ordinary Windows laptop. Mine is a Dell Inspiron 15 5000 series with a touch screen. At first, audio and wireless didn't work but after copying over the firmware directory from Arnoldthebat's Special Build and removing a kernel module blacklist, everything started working. 3D acceleration, sound, touch screen, web cam, touch pad, Android, etc. all work and installed to the hard drive.
It's not perfect, however. For some odd reason it takes like 3 minutes or so to login with my user account at the login screen, whereas on Chromium OS, I log in instantly. Once booted, everything is fine, though. Furthermore, laptop suspend/sleep (S3 power state) doesn't function properly (probably due to the older 4.4 kernel with newer ones having better laptop ACPI support), so I made sure to turn that off in the ChromeOS power settings. Lastly, automatic updates won't work. It sees the Omaha update server but the logs are showing that it refuses to connect because the update tool doesn't detect valid Chromebook BIOS firmware and/or hardware security module.
Out of curiosity, I replaced the 4.4.86 kernel with Arnoldthebat's Special Build 4.14 kernel and March 2nd 4.4.118 daily build kernel with the ChromeOS image and it booted fine and showed up in uname, however, the Android container wouldn't start but some of the ARC++ container mount points were still be made via df. ARC++ error messages in /var/log showed permission denied and file not found messages when using the other kernels. So it appears there is some special code compiled into with the official ChromeOS kernels that aren't included with the FOSS Chromium kernel sources?
Anyway, here is a screenshot:

Hi @XaeroVincent, interesting experiments!! can you confirm if you have Vulkan inside this "Android on ChromeOS" by downloading VulkanCapsViewer similar to how I asked in your Oreo efforts.. if Play Store works OK then ok if not download from: https://vulkan.gpuinfo.org/download.php https://vulkan.gpuinfo.org/downloads/vulkancapsviewer_1_4_x86.apk maybe noob question but have you tested your modified ChromeOS via Qemu GVT Dma-buf to see if it works? thanks..
Hi @oscarbg,
Yes! Vulkan works on ChromeOS's Android container on my Dell Inspiron 5559. It was broken in the previous ChromeOS build but appears to be working in v10176.76.0 / 64.0.3282.190.
I tested the GPU with 3DMark, VulkanCapsViewer and OpenGL ES CapsViewer. It appears ChromeOS 64 is using Mesa 17.3 RC5, which on the Intel i915 driver exposes Vulkan 1.0.57 and OpenGL ES 3.1 in the Android 7.1.1 container. As of now, the Intel OpenGL ES driver seems to be more optimized than their Vulkan driver.
I would love to be able to get it working in VMware on my gaming laptop with a GTX 1070. I'm able to recompile the Linux 4.4 kernel with the VMware SVGA3D graphics driver (VMWGX), however the VMware just reboots at the splash screen. With the newer 4.14 ChromeOS kernel, VMware will boot into ChromiumOS desktop but Android support breaks whenever not using the official 4.4 kernel, which defeats the point of wanting to use it. I've also tried making kernel headers from the 4.4.96 kernel and manually compiling the driver in a chroot but for whatever reason the symbols still don't match and I'm not able to modprobe nor insmod 'vmwgfx.ko'. It's seems pretty clear that the magic bits to make Android / ARC++ work on ChromeOS is secretive.
I have been unsuccessful at getting the Play Store / Android to work with anything except the official bundled ChromeOS 4.4.96 kernel, even when testing bare-metal on my Dell laptop. :( [cries a long time] I've tried compiling several different ChromeOS kernels, making sure the Android kernel features were enabled in base.conf and even extracting the base.conf from the binary, official ChromeOS kernel, but still no dice. When I click the Play Store icon when running on other kernels, it just spins--no window ever pops up and the ARC container doesn't mount properly in '/run'. It should mount the Android root to something like "/run/containers/android_5oNjIR/".
ChromeOS in QEMU w/ GVT + DMA-BUF may work, but as I've mentioned on the Intel forum, I was only able to get DMA-BUF working with SeaBIOS. ChromeOS at best would only support TianoCore UEFI, as Chrome OS will not work with SeaBIOS or any legacy BIOS / CSM from what I can tell. Chrome OS appears to require an EFI system with some special ChromeOS EFI extensions and a GPT partition table. Your best bet is to just run an Android x86 Oreo build directly on-top of QEMU w/ SeaBIOS as we already know that DMA-BUF works that way. The filesystem layout (comprising of several different partitions) is very strange compared to normal Linux distros.
Here's a screenshot. Enjoy!
Hi @XaeroVincent , can you give me a hint on what you mean with
"It appears with some fiddling around, it's possible to get the genuine Chrome OS images to work on an ordinary Windows laptop."
I searched, but didn't found somthing.
Hi there @mploetne,
There are no official guides. The gist of it is you first need to install a Chromium OS build then download an official recovery image listed in recovery.conf, copy it to a flash drive then use gparted to resize the resulting the sda1 and sda3 partitions. Afterwards, boot into Chromium OS and use 'dd' to overwrite the data in the sda1 and sda3 partitions from the respective partitions on the flash drive. I recommend using an x86-64 branch that uses the Linux 4.4 kernel, such as 'eve' or 'coral'
https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices
After this, you should be able to boot into official chrome OS (if you have integrated Intel graphics). Almost no chance of it working with Radeon or GeForce GPUs because the driver modules for those aren't included with the official builds. However there will still be problems. You'll very likely need to download the Linux binary firmware files for and place them in /lib for Intel / Realtek WiFi + Bluetooth to work then remove the blacklisted module in /etc/modprobe for audio to work.
It's quite an involved process and you definitely need to be comfortable with a Linux environment and have 'close-enough' laptop hardware. Now of course it's possible to recompile the kernel with more features and driver modules for broader hardware support (I've done just that multiple times) but for whatever reason, it breaks Android support, which is the only reason anyone would want to try an official image in the first place.
What might be another interesting scenario is if it's possible to get an Android OS image to run on-top of the KVM-based Crosvm virtual machine. I know Google is working to port QEMU's Virtio GPU drivers to Crossvm to provide accelerated graphics output on Chrome OS's built-in Wayland compositor.
I'll have to check and see if the Crossvm bits have landed in vanilla Chromium OS 67 developer builds that Arnold The Bat hosts. I have managed to get QEMU w/ an Android guest to appear on Chrome OS's Wayland compistor with GTK and SDL QEMU windows (when I recompiled the kernel with KVM and VirtIO support enabled), by using Crouton chroot but only with software rendering enabled. The QEMU window freezes on the Chrome OS's Ash desktop when '-vga virtio' + 'gl=on' is enabled but works fine with software rendering but that sucks for playing Android games.
Anyway, it's a lot of fun to play with but honestly the best Android support I've seen outside of Official Chrome OS is running Android as a VM guest on-top of QEMU on Archlinux or Ubuntu w/ DMA-BUF enabled (Intel GVT-g shared GPU pass-through technology). Virtio GPU may work on bleeding-edge Android x86 builds as well but I haven't tried that yet.
@XaeroVincent, Just out of curiosity, Chrome OS uses some kernel modules(namely ashmem
and binder
,which should be added as either out-of-tree or in-kernel) to be able to run Android apps.
does AndroidTheBat kernel include these? or could that be the case may be?
@Thisuu, Yeah the kernel base.conf has some modules that are compiled in and I made sure those were enabled my kernel config:
CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_TIMED_GPIO=y CONFIG_ANDROID_TIMED_OUTPUT=y CONFIG_ASHMEM=y
However, even if I compile the same exact release kernel
https://chromium.googlesource.com/chromiumos/third_party/kernel/+/release-R64-10176.B-chromeos-4.4
...with the exact base.conf extracted from the backup kernel via: cat /proc/config.gz | gunzip > base.config, Android apps still won't run with the freshly compiled kernel.
However, I did notice something interesting, which might explain it? I've been using the latest GCC 7.x toolchain in my chroot or VM to compile the kernel.
It appears Google is using the GCC 4.9 Android compiler toolchain to build the official ChromeOS kernels.
@XaeroVincent Not sure if that's causing the issue.. may be try with GCC 4.9? Also make sure support for cgroups and user namespace etc are enabled, see https://www.funtoo.org/Linux_Containers#Kernel_configuration
And please ping me if you find a workaround/reason causing that delayed login :) I did some digging through but couldn't find anything yet.
@XaeroVincent So it seems like some dbus services are causing the login process hang, Try removing
/etc/dbus-1/system.d/org.chromium.TpmManager.conf
&
/etc/dbus-1/system.d/org.chromium.Trunks.conf
to see if it makes any difference.
@Thisuu Thanks for the suggestion! 'org.chromium.Trunks.conf' does indeed contain a 4 minute timeout to halt the login process relating to the TPM and taking ownership of it. Because this Dell laptop isn't a chromebook it doesn't recognize it's TPM chip, which just causes the various TPM related processes to fail and spawn error messages in dmesg, which is probably the reason for the long delay--before Chrome's login manager finally gives up trying to query info from the unrecognized TPM. Lowering the value or deleting these or other files does have an impact, however not the one I was expecting. Instead of the long pause before logging in, it just quickly just rejects the login authentication and just loops back to the login screen and I'm never able to login. Deleting other files like tpm_manager, cryptohome, trunks, attestation, etc will just break the login manager and never log the user in. The log files shown it was cryptohome daemon rejecting the credentials when timeout is set really low. Trusted Platform Module chip authentications and SELinux enforced policies are very heavily ingrained in the the official ChromeOS images. Google isn't joking when they say they focus on security with Chrome OS. That said, I managed to get another Chrome OS image to work without the login lag (after a fair bit of fiddling) and is based on the new Meltdown/Spectre-patched Chrome 65. This image came with kernel 3.18, which works with Android too. I swapped that kernel out from the image for another image's 4.4.111 kernel and that is working just fine too with Android's Google Play. The images are missing a lot of proprietary firmware blobs, so I just merged my Archlinux VM's /lib/firmware directory with that on Chrome OS and suddenly WiFi and Bluetooth started working.
@Thisuu Have you tried making an official Chrome OS w/ Android support working on a standard PC too? You should try it...it's plenty of fun and Chrome OS is quite a nice operating system w/ an added Linux chroot and far more interesting with container-based Android support because most Chrome Web Apps and games are laughable garbage compared to the Play Store and the Chrome App platform has been deprecated by Google in favor of WebAssembly and other web technologies. I won't try redistributing my PC-fixed official Chrome OS images as I'm sure Google's lawyers would unleash their wrath on me but I doubt Google cares if you you're geeky enough to make them work on your whitebox PCs for the purpose of personal use. :)
I will see if I can get the Android 4.9.x GCC stack and build 4.14 with Android support enabled and see if that makes it work. That said, simply recompiling the kernel with RadeonSI/AMDGPU and Nouveau modules enabled aren't enough (I tried) because the ChromeOS's Mesa stack is missing the OpenGL drivers for AMD and Nvidia cards too, which means Mesa will need to be recompiled with those drivers. This would probably require a full ChromeOS rebuild?
@XaeroVincent Yeah,I already have :D Did a dd
from Chromium OS img to two partitions to be used as ROOT-A & STATE then mounted an official ChromeOS image and sudo rsync -zavhEAX /directory/to-ChromeOS/ROOT-A/ /directory/to-ChromiumOS/ROOT-A/
ed. It's later that i realized Google assistant is only included in Pixelbook images :) so maybe next time i'll go with the Pixelbook one. And yeah,it's lot of fun to play with. Other than that logging delay and few issues like S3 state which i can live with,it's working perfectly fine. Really looking forward for Crostini,to see if i can make it my primary OS with all the linux apps in place and the added advantage of Play Store.It's still linux after all. That logging lag is the one i really need to be fixed,Cuz i hate it booting within 4-5 seconds then having to wait 2 minutes just to logging in :D
I had a 4-5 minutes login lag before and it was reduced to 2mins after removing /etc/dbus-1/system.d/org.chromium.TpmManager.conf
& /etc/dbus-1/system.d/org.chromium.Trunks.conf
.Then attestationd had few respawns in dmesg but removing /etc/dbus-1/system.d/org.chromium.Attestation.conf
breaks login,causing cryptohome to continuesly respawn. And yeah,removing files from /etc/init seems to make it unable to login. sudo initctl stop tpm_managerd
will work,but you will need to run it at every login since it isn't persistent. I'm not much familiar with Upstart and it seems that chkconfig
is the one to disable Upstart jobs,which doesn't exist in ChromeOS. Which image did work for u exactly? I'll first try with a Pixelbook img and see if it works fine.
Welll i have no idea tbh. I really needed to give it a try building an img and see how it goes,my my HD is full of personal stuff right now. So may be i'll have to do a clean up first :)
Also what's ur Arch's kernel version? I'm using Solus as primary OS,so I'll see if copying over firmware from that works.
Well, I'm gonna try do this too, TRY!
Hi everone, very interesting thread.
I also installed Chromium OS (Special build from Arnold) and replaced the content of the sd*3 partition with the asuka recovery build.
I did not replace the /boot and the /lib folder. Furthermore I also commented the entry in alsa-sld.conf for audio support.
Everything works fine except Google Playstore. Accepting the licenses results in an error.
Okay, found it.
I had to change the settings in the file selinux.conf to permissive.
The apps are working really fast, multiple apps at the same time are no problems at all:
Can anybody publish step by step instructions on how to get chrome os on desktop pc, with working playstore for extra dummy?
Do you have a working Chromium OS installation from https://arnoldthebat.co.uk/wordpress/2018/02/11/chromiumos-enhanced-special-build-r64-10176-b/ on your PC?
Yes, i do. Latest Arnold's chromium os 64 special
fine. then you need to download a recovery image, which is is fitting for your architecture/platform
you have here a list for all supported devices https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices
here you can find your chosen image: https://dl.google.com/dl/edgedl/chromeos/recovery/recovery.conf e.g. chromeos_10323.62.0_asuka_recovery_stable-channel_mp.bin
after downloading please use following commands to open the third partition of the image (be sure to be root)
losetup -fP {path_to}/chromeos_10323.62.0_asuka_recovery_stable-channel_mp.bin mkdir /home/chronos/image mkdir /home/chronos/local
mkfs.ext4 /dev/sda5
mount /dev/sda5 /home/chronos/local
type losetup to get a list, search for loop{number}p3
mount /dev/loop{number}p3 /home/chronos/image -o loop,ro
cp -av /home/chronos/image/* /home/chronos/local
rm -rf /home/chronos/local/lib/firmware rm -rf /home/chronos/local/lib/modules/ (name of folder depends on kernel)
cp -av /lib/firmware /home/chronos/local/lib/modules/ cp -av /lib/modules/4.14.3 /home/chronos/local/lib/modules/
rm -rf /home/chronos/local/etc/modprobe/alsa-skl.conf
change in /home/chronos/local/etc/selinux/config the word enforcing to permissive
type in the command sync to ensure everything is stored and then reboot.
after that you need to change the bootloader to set root=/dev/sda5 to see if everything has worked out fine.
just type e on the black bootloader screen, change the root entry as described above and press F10.
you should now see the Chrome OS image instead of Chromium OS.
i am not sure if you will lose any data, so be sure to backup everything needed.
localhost / # mount /dev/loop1p3 /home/chronos/image -o loop,ro mount: /dev/loop1p3: failed to setup loop device: No such file or directory
In /dev are:
ashmem cpu hidraw1 i2c-11 i2c-8 loop0 loop2p4 loop6 null rfkill sda3 sdb2 uhid vhci binder cpu_dma_latency hidraw2 i2c-12 i2c-9 loop1 loop2p5 loop7 nvram rtc sda4 sdb3 uinput vhost-vsock block disk hidraw3 i2c-13 input loop2 loop2p6 loop-control port rtc0 sda5 sdb4 urandom vndbinder bsg dm-0 hpet i2c-2 ion loop2p1 loop2p7 mapper ppp sda sda6 shm usb watchdog bus dri hwbinder i2c-3 jail-control loop2p10 loop2p8 mem pstore sda1 sda7 snd usbmon0 watchdog0 char fd hwrng i2c-4 jail-request loop2p11 loop2p9 memory_bandwidth ptmx sda10 sda8 stderr usbmon1 xt_qtaguid chromeos-low-mem full i2c-0 i2c-5 kmsg loop2p12 loop3 net ptp0 sda11 sda9 stdin usbmon2 zero console fuse i2c-1 i2c-6 kvm loop2p2 loop4 network_latency pts sda12 sdb stdout usbmon3 zram0 core hidraw0 i2c-10 i2c-7 log loop2p3 loop5 network_throughput random sda2 sdb1 tty usbmon4
Then
localhost / # cp -av /lib/modules/firmware /home/chronos/image/lib/modules/ cp: cannot stat '/lib/modules/firmware': No such file or directory
ls gives
localhost / # ls /lib/modules/ 4.14.3
Then:
localhost / # cp -av /lib/modules/4.14.3 /home/chronos/image/lib/modules/ cp: cannot create directory '/home/chronos/image/lib/modules/4.14.3': Read-only file system
I updated my description / mistakes.
Thank you for your feedback.
In your case the required partition seems to be loop2p3. Try that for the losetup command.
losetup show's:
localhost Downloads # losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /home/user/91999e3615d25d1c90fe6ec2a4cb51a0d0d2c7e5/Downloads/chromeos_10176.76.0_caroline_recovery_stable-channel_mp.bin
0
/dev/loop0 0 0 0 0 /mnt/stateful_partition/encrypted.block 0
But ls /dev, show's loop1p3, so i used it:
localhost Downloads # ls /dev
ashmem dri i2c-10 ion loop1p3 loop-control ptp0 sda4 tty watchdog
binder fd i2c-11 jail-control loop1p4 mapper pts sda5 uhid watchdog0
block full i2c-12 jail-request loop1p5 mem random sda6 uinput xt_qtaguid
bsg fuse i2c-13 kmsg loop1p6 memory_bandwidth rfkill sda7 urandom zero
bus hidraw0 i2c-2 kvm loop1p7 net rtc sda8 usb zram0
char hidraw1 i2c-3 log loop1p8 network_latency rtc0 sda9 usbmon0
chromeos-low-mem hidraw2 i2c-4 loop0 loop1p9 network_throughput sda sdb usbmon1
console hidraw3 i2c-5 loop1 loop2 null sda1 sdb1 usbmon2
core hpet i2c-6 loop1p1 loop3 nvram sda10 shm usbmon3
cpu hwbinder i2c-7 loop1p10 loop4 port sda11 snd usbmon4
cpu_dma_latency hwrng i2c-8 loop1p11 loop5 ppp sda12 stderr vhci
disk i2c-0 i2c-9 loop1p12 loop6 pstore sda2 stdin vhost-vsock
dm-0 i2c-1 input loop1p2 loop7 ptmx sda3 stdout vndbinder
Command's seem's to be worked fine. After reboot i pressed e, and added to boot string root=/dev/sda5 and i got chrome logo, but it goest to reboot, probably downloaded incompatible image or probably due to using nvidia gpu as main. I'm gonna try asuka too.
Thanks for the guidance! I've noticed that only the 'asuka' recovery image worked. The others I tried simply didn't have files on the third partition. Maybe this has to do something with the version number (10323 compared to 10176 of the three other images I tested)? Though when I boot up I have only a few seconds at the login screen before my system crashes without any warning. It doesn't matter what input I make. I had the same problem when I tried updating ChromiumOS to official ChromeOS via the script mentioned here. Anyone else has this problem?
@ggy7 I simply chose local image B to boot into chrome OS, as in the boot entries there is no 'root=/dev/sdX' text but instead UUIDs for the different partitions.
@XaeroVincent Can you tell me how you resized the sda1 and sda3 partitions? With GParted I get the error that e2fsck needs to be updated. (I'm using a version from 22-Mar-2018, so that shouldn't be the case)
@ggy7 I simply chose local image B to boot into chrome OS, as in the boot entries there is no 'root=/dev/sdX' text but instead UUIDs for the different partitions.
Local image B doesn't work for me, i just changed UUID to root=/dev/sda5 in Local image A boot string
Ok, system boot's. Can you tell me, how can i permanently save boot entry root=/dev/sda5 in Grub? How can i find and mount boot partition to edit grub.cfg, if i understand properly. Thnx. And look like i don't have sound.
@ggy7 On the 12th partition (/dev/sda12) is the boot loader (efi and syslinux). You can find the files to change there.
Thanks, done with it. But i've noticed that i don't have a sound. Sound control show's only one output UVC cam, USB... Alsamixer show's only this variant too. Any ideas?
@ggy7 did you remove this file: /home/chronos/local/etc/modprobe/alsa-skl.conf
it prevents loading the kernel module for sound
look like i skipped this command. I tried this command again and it say's done, it doesn't helped. When i checked where is alsa-skl.conf, using find / -name alsa-skl.conf it say's /etc/modprobe.d/alsa-skl.conf and it's in read-only mode, i can't remove it.
I used Gparted Live CD to resize them. @ggy7 ChromeOS by default boots with the root partition in read only mode. Do "sudo mount -o remount, rw /" to fix that.
Thanks. Fixed!
@XaeroVincent, Is webcam working for you within Android apps?