Cuda, camera for Acer Chromebook 13 CB5-311

I’d like to develop image processing applications using Acer Chromebook 13 CB5-311, what’s the best approach to install Cuda and have built-in camera working with good acquisition/GPU performance?

Thanks in advance.

I don’t think there’s anything official, but something similar was discussed here a while back: https://devtalk.nvidia.com/default/topic/776767/cuda-programming-on-chromebook/

The link is very helpful, I was able to use crouton to install ubuntu on top of Chrome OS with almost everything working, but CUDA samples failed to run with error “CUDA driver version is insufficient for CUDA runtime version”.

I’ll try the approach to boot from SD card with an earlier, known working kernel.

I installed L4T following these instructions: GitHub - lgeek/gnu-linux-on-acer-chromebook-13

Camera works but I didn’t try Cuda yet. GPU performance is about 40% slower than TK1 (964 points vs. 590 points in glmark2).

I followed that link: GitHub - lgeek/gnu-linux-on-acer-chromebook-13

but got “beta driver” with Nvidia logo twice during boot from SD card and “The system is running in low-graphics mode” and the KB got stuck.

I used Tegra TK1 to build kernel without cross compiling . e.g.,

WIFIVERSION=-3.8 make menuconfig

instead of

WIFIVERSION=-3.8 ARCH=arm CROSS_COMPILE=arm-none-eabi- make menuconfig

There may be some details missing from the instructions.

Hard to say what’s wrong. I used my Ubuntu x86 computer to cross compile the kernel and drivers. You just have to take care that you use the cross-compiler prefix of the cross compiler you installed.
Maybe there is something wrong with the device tree? Did you install all drivers? The kernel modules you compiled and the nvidia gpu driver? I get the “beta driver” logo only once. I also have some issues if the GPU initialization did not finish before Ubuntu started which sometimes results in ugly glitches but this can be solved by deactivating auto-login. Indeed there are some details mising in the instructions (e.g. you must use the firmware from ChromeOS and not the one from x86 Ubuntu to get wifi working).
What happens if you remove the GPU driver? I get a black screen but I’m still able to get a terminal by pressing ctrl+alt+f1 (login: ubuntu/ubuntu). Then you can have a look what lsmod tells you.

The last part of the instruction is not clear, I copied everything from “nvidia_drivers” to “rootfs”.

I just found I used board version 8_9 instead of 3_7 (I started building before I got the Chromebook), I’ll try board version 3_7.

I’ll try remove the GPU driver and “ctrl+alt+f1”.

Thanks

Within the last few days someone had asked about the TRM for TK1 64-bit (I think it was for this Acer Chromebook). I had looked at the 64-bit and knew the tegra124 on Jetson was 32-bit which seemed confusing…apparently the Denver CPU is used on Chromebook instead of the ARM Cortex A15 of Jetson. So this means native compile on a Jetson TK1 (32-bit) would be incorrect for building software to go on the Chromebook (64-bit), despite having the same GPU. Cross-compile seems to be the solution unless you can compile directly on the Chromebook.

I believe Acer Chromebook 13 and HP chromebook 14 use 32 bit Tegra K1.

I did the same but I also extracted the content of the config.tar.bz archive to the rootfs.
I have no idea if that was right but I also copied “nvhost-vi.ko” to “/lib/modules/3.10.18/kernel/drivers/video/tegra/host/vi/”

I’m not sure if this really a good idea but I remember that I forgot the GPU driver at first and I was able to fix it in this way. If terminal1 is blocked then try “ctrl+alt+f2”.

I copied rootfs to SD card without applying “nvidia_drivers” by the following:

sudo cgpt create /dev/mmcblk1
sudo cgpt add -b 34 -s 32768 -P 1 -S 1 -t kernel -l kernel /dev/mmcblk1 # 16 MB kernel image partition
sudo cgpt add -b 32802 -s 16777216 -t rootfs -l rootfs /dev/mmcblk1 # 8 GB rootfs partition

#Copy data to the SD card

sudo dd if=./kernel.bin of=/dev/mmcblk1p1
sudo mkfs.ext4 /dev/mmcblk1p2
sudo mount /dev/mmcblk1p2 /mnt/

cd /mnt
sudo tar xpf ~/Jetson/Tegra_Linux_Sample-Root-Filesystem_R21.4.0_armhf.tbz2

I did get black screen and was able to get a terminal by pressing ctrl+alt+f1 and login as ubuntu/ubuntu.

I tried “sudo lsmod” and got no module listed.

On Jetson TK1, I got 7 modules listed including “nvhost_vi”.

I’ll try extract config.tar.bz and “nvidia_drivers” to the rootfs.
and copy “nvhost-vi.ko” to “/lib/modules/3.10.18/kernel/drivers/video/tegra/host/vi/”

Thanks

The key is to extract “config.tar.bz” in addition to “nvidia_drivers” to the rootfs. Those details were missing from the link

I was able to get ubuntu 14.04 LTS desktop!

Now I have problem of login as ubuntu/ubuntu. After I entered “ubuntu” as password, the screen flashed twice and I got back to the login screen.

This happed to my Jetson TK1 once after I did “sudo apt-get upgrade”. I had to reflash my Jetson TK1.

For the time the display flashed and went black on your Jetson, was this the R19.x release? If so, it was likely an upgrade which overwrote libglx.so. Under that case, placing the file back in would fix the issue (until the next upgrade overwrites it).

Incidentally, you might use the “apply_binaries.sh” script to unpack the required files…it has a “normally unused” option of “–root ” for an alternate destination other than the current directory. This same script can be used in a running system and aimed at “–root /”…this is in fact how the original R19.2 shipped and kept the purely Ubuntu distribution separate from proprietary files until applied by the end user. The advantage being that this should add both config files and binaries…although I’m not sure if modules are hard coded to a specific kernel version (in which case modules would need to be moved).

There should be some modules. This is my output:

What is the content of your “/lib/modules/3.10.18” directory? As you can see “nvhost-vi” is not listed so maybe it is not important. Did you also copy the modules you compiled?

And of course this is also needed before updating the system:

I was able to “login” without entering user/pw using anther identical Patriot 32 GB SD card. The kernel and rootfs are identical as the first SD card.

For the 2nd SD card I first extracted rootfs in the following order:

sudo tar xpf ~/Jetson/nvidia_drivers.tbz2
sudo tar xpf ~/Jetson/config.tbz2
sudo tar xpf ~/Jetson/Tegra_Linux_Sample-Root-Filesystem_R21.4.0_armhf.tbz2
sudo INSTALL_MOD_PATH=/mnt/ WIFIVERSION=-3.8 make modules_install

and got black screen, I then changed order:

sudo tar xpf ~/Jetson/Tegra_Linux_Sample-Root-Filesystem_R21.4.0_armhf.tbz2
sudo tar xpf ~/Jetson/config.tbz2
sudo tar xpf ~/Jetson/nvidia_drivers.tbz2
sudo INSTALL_MOD_PATH=/mnt/ WIFIVERSION=-3.8 make modules_install

and it worked. Not sure why it didn’t ask for password. After log out, I get normal login screen and can login with ubuntu/ubuntu.

Yes, the “apply_binaries.sh” scrip without option does not seem to work for chromebook, I got KB locked up. I did not have time to check details of “apply_binaries.sh”

I did not copy “nvhost-vi” to get ubuntu desktop.

I still did not get anything listed by “sudo lsmod”.

Content of my “/lib/modules/3.10.18”:

build-> /home/ubuntu/kernel
kernel
modules.alias
modules.alias.bin
modules.builtin
modules.builtin.bin
modules.modules.dep
modules.modules.dep.bin
modules.devname
modules.order
modules.softdep
modules.symbols
modules.symbols.bin
source → /home/ubuntu/kernel

Now the problem is I don’t have wifi.

FYI, unpacking the sample rootfs always needs to be first, and apply_binaries.sh (or manual unpack) needs to be last.

LightDM supports autologin. As I told you I switched that off because sometimes I get ugly glitches when the GPU initialization was to slow (my SD card is a fast one - 95MB/s reading speed).

Did you update the module configuration with depmod? Are you able to load modules manually with “insmod” or “modprobe”? What is inside “/proc/device-tree”?

When I tried depmod, I got errors for many modules, e.g.

depmod: ERROR: failed to load symbols from /lib/modules/3.10.18/kernel/net/wireless-3.8/lib80211.ko

When I entered “ls -l /lib/modules/3.10.18/kernel/net/wireless-3.8”

I found 4 of the 5 *.ko modules (except cfg80211.ko) have size 0.

Many modules in “/lib/modules/3.10.18/kernel/sound” also have size 0.

“sudo lsmod” returned empty, it showed “p8022” after I did “sudo modprobe p8022”. it seems modprobe worked but modules were not automatically loaded.

My device tree shows:

device-tree:
#address-cells model
ahb name
ahub phy@7009f000
aliases pinmux
backlight pmc
chosen pmu
clock pwm
clocks ramoops
compatible regulators
cpu_dfll_board_params rtc
cpu_dfll_cvb_table sdhci@700b0000
cpu_dfll_pmic_integration sdhci@700b0200
cpu_dfll_tuning sdhci@700b0400
cpu_edp sdhci@700b0600
cpu_edp_cdev_action serial@70006000
cpus serial@70006040
cpu-throttling-state serial@70006200
dfll@70110000 serial@70006300
dfll_cdev_action #size-cells
dma@60020000 soc_therm
firmware sound
fuse@7000f800 spi@7000d400
gpio spi@7000d600
gpio-keys spi@7000d800
gpu-throttling-state spi@7000da00
hda@70030000 spi@7000dc00
host1x@50000000 spi@7000de00
i2c@7000c000 thermal-zones
i2c@7000c400 therm-est
i2c@7000c500 timer
i2c@7000c700 timer@60005000
i2c@7000d000 tj-temperature-throttling
interrupt-controller@50041000 usb@70090000
interrupt-parent usb@7d000000
iommu usb@7d004000
kfuse
marwell
memory
memory-controller

A size of 0 bytes is wrong. This is how my modules look like: [url]http://www.xup.in/dl,57858071/modules.tar.gz/[/url]

Thanks for the modules, I saved them to my chromebook and got a list of modules listed by lsmod, including uvcvideo. My built-in cam now shows as “/dev/video0”.

I’m not sure why the modules were missing, from building kernel, copying rootfs or from the last step “make modules_install”.

Now I still don’t have “pci” listed under “/proc/bus” and wifi still not working.