Building Ubuntu rootfs for ARM

Most embedded filesystems(rootfs) are build with debootstrap or Linaro. Let’s explore a third possibility with core-ubuntu filesystems.

Steps to perform on any Debian based distribution (preferably)

1) Create some directory of your choice and download the core rootfs from Ubuntu server

mkdir ~/ubuntu-rootfs && cd ubuntu-rootfs

2) Extract the downloaded image with ‘sudo’ to allow ‘mknod’ commands to work

sudo tar -xpf ubuntu-core-14.04-core-armhf.tar.gz

You may remove the ubuntu-core-14.04-core-armhf.tar.gz file now.
Change directory cd .. or cd -

3) Install qemu-user-static from your package manager

sudo cp /usr/bin/qemu-arm-static usr/bin/

4) Mount proc, sys, dev, dev/pts to new fileystem. We will use a simple bash script for mounting and un-mounting. Download to present directory.

sudo bash -m ubuntu-rootfs/

5) Once you are in chroot environment, edit /etc/apt/sources.list and un-comment all the repositories except the ones starting with deb-src. You may use vim.tiny text editor

6) To update repositories, copy your system’s(host machine’s) /etc/resolv.conf to ~/ubuntu-rootfs/etc/resolv.conf .Set proxies if required.

7) Now update the repositories

apt-get update

8) Now install minimal packages required for X server and some core utils

apt-get install language-pack-en-base sudo ssh net-tools ethtool wireless-tools lxde xfce4-power-manager xinit xorg network-manager iputils-ping rsyslog lightdm-gtk-greeter alsa-utils gnome-mplayer lightdm bash-completion lxtask htop python-gobject-2 python-gtk2 synaptic --no-install-recommends

9) Now add a user of your choice and include him in suitable groups

adduser student && addgroup student adm && addgroup student sudo && addgroup student audio

10) Add hostname to /etc/hostname

echo ‘netbook’ > /etc/hostname

10) Add host entry in /etc/hosts    localhost    netbook

11) Also on few ARM devices, if you are using source from Android kernel, then you may have to do the following too

groupadd -g 3003 android_inet && addgroup student android_inet

12) Make X used by ‘anyuser’

dpkg-reconfigure x11-common

13) To allow /etc/resolv.conf to update DNS automatically based on network connection (as we changed that file previously to make internet work)

dpkg-reconfigure resolvconf

(Select ‘Yes’ to the first dialog box, i.e allow dynamic updates)
14) Set ‘timezone’

dpkg-reconfigure tzdata

15) Create directories for ‘firmware’ and ‘modules’ in ‘/lib'(ofcourse inside chroot) and copy your hardware specific files from host

cp -r /opt/out/modules/3.4.5 ~/ubuntu-rootfs/lib/modules

16)Optional. To enable login at serial console, add following in /etc/init/ttyS0.conf file and run sudo start ttyS0

start on stopped rc or RUNLEVEL=[12345]
stop on runlevel [!12345]
exec /sbin/getty -L 115200 ttyS0 vt102

That’s all, you may customize even further if required.

  • Ashish Pal

    /usr/bin/groups: cannot find name for group ID 3003
    /usr/bin/groups: cannot find name for group ID 9997
    /usr/bin/groups: cannot find name for group ID 50183
    root@localhost:/# groupadd – 3003 android_inet
    Cannot open audit interface – aborting.

  • Ashish, to which command you got this output? Also, which Ubuntu version you are using as host?
    The step 11 is optional though.

  • Ashish Pal

    Android GnuRoot. Ubuntu 15.10 rootfs for arm. When I start this rootfs in Gnuroot, I’m getting those errors.

  • Android GNURoot, I believe download it’s own custom rootfs, which is adequate in most cases. Providing a self made rootfs may not be compatible. From your previous comment I can see it is expecting few groups which are not created by our tutorial, a simple fix would be looking into GNURoot’s scripts which create the rootfs and creating those nodes in /etc/groups.
    I hope this answer your query.
    This tutorial is mainly for creating a working ARM rootfs inside x86 host machine using qemu.

  • Ashish Pal

    Please guide me using ubuntu 15.10 rootfs in Android terminal using proot.

  • Sorry, I haven’t used proot. It looks promising though.

  • Pingback: What Is Rootfs In Android | android Skill()

  • Pingback: What Is Rootfs Android | android Skill()

  • Pingback: URL()

  • Pingback: How To Customize Weberp | Information()

  • Pingback: How To Install Weberp On Ubuntu | Information()

  • Favas Ishaque

    will simply copying the modules and firmware directory to /lib autoload the modules at boot ? Or is there anything extra to do ?