Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


products:sbc:common:development:build-ubuntu

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
products:sbc:common:development:build-ubuntu [2022/07/04 22:16]
nick created
products:sbc:common:development:build-ubuntu [2026/05/11 02:13] (current)
nick
Line 1: Line 1:
 ====== Build Ubuntu ====== ====== Build Ubuntu ======
  
 +===== Introduction =====
 +
 +We provide [[kg>fenix|Fenix]] to help you build Ubuntu OS images easily. \\
 +You can follow the steps below.
 +
 +
 +===== Preparation =====
 +
 +Install essential dependencies.
 +
 +```shell
 +$ sudo apt update
 +$ sudo apt install git make lsb-release qemu-user-static
 +```
 +
 +===== Get Fenix source code =====
 +
 +Clone the Fenix repository to a directory, e.g., ''~/project''.
 +
 +```shell
 +$ mkdir ~/project
 +$ cd ~/project/
 +$ git clone --depth 1 https://github.com/khadas/fenix
 +```
 +
 +===== Setup the build environment =====
 +
 +You must set up the build environment first. \\
 +
 +For example: ''Board type'', ''Linux version'', ''distribution''.
 +
 +```shell
 +$ cd ~/project/fenix
 +$ source env/setenv.sh
 +```
 +
 +===== Build the OS image =====
 +
 +Simply type ''make'' to start the build.
 +
 +<WRAP tip > 
 +If this is your first time building an image, the script will check your host environment and install essential packages. Additionally, repositories (such as U-Boot and Linux) will be automatically cloned from the Khadas GitHub. 
 +</WRAP>
 +
 +===== Other build commands =====
 +
 +
 +==== Build U-Boot ====
 +
 +```shell
 +$ make uboot
 +```
 +
 +==== Build U-Boot Debian package ====
 +
 +```shell
 +$ make uboot-deb
 +```
 +
 +==== Build Linux ====
 +
 +```shell
 +$ make kernel
 +```
 +
 +==== Build Linux Debian package ====
 +
 +```shell
 +$ make kernel-deb
 +```
 +
 +==== Build GPU Debian package ====
 +
 +```shell
 +$ make gpu-deb
 +```
 +
 +==== Build the board Debian package ====
 +
 +```shell
 +$ make board-deb
 +```
 +
 +==== Build all Debian packages ====
 +
 +```shell
 +$ make debs
 +```
 +
 +==== Build U-Boot image ====
 +
 +```shell
 +$ make uboot-image
 +```
 +
 +==== Clean Linux source tree ====
 +
 +```shell
 +$ make kernel-clean
 +```
 +
 +==== Show Linux menuconfig ====
 +
 +```shell
 +$ make kernel-config
 +```
 +
 +==== Save Linux defconfig ====
 +
 +```shell
 +$ make kernel-saveconfig
 +```
 +
 +==== Clean U-Boot source tree ====
 +
 +```shell
 +$ make uboot-clean
 +```
 +
 +==== Help messages ====
 +
 +You can get help messages by executing ''make help'':
 +
 +```shell
 +$ make help
 +Fenix scripts help messages:
 +  all                   - Create image according to environment.
 +  kernel                - Build linux kernel.
 +  kernel-clean          - Clean linux source tree.
 +  kernel-config         - Show linux menuconfig.
 +  kernel-saveconfig     - Save linux defconfig.
 +  uboot                 - Build u-boot.
 +  uboot-clean           - Clean u-boot source tree.
 +  uboot-deb             - Build u-boot debian package.
 +  uboot-image           - Build minimal image only with u-boot.
 +  kernel-deb            - Build linux debian package.
 +  board-deb             - Build board debian package.
 +  common-deb            - Build common debian package.
 +  desktop-deb           - Build desktop debian package.
 +  gpu-deb               - Build gpu debian package.
 +  debs                  - Build all debian packages.
 +  image                 - Pack update image.
 +  clean                 - Cleanup.
 +  info                  - Display current environment.
 +  get-make-params       - Get available make parameters.
 +```
 +
 +==== Build options ====
 +
 +Options for building:
 +
 +  * ''NO_CCACHE'' - ccache option
 +    * ''NO_CCACHE=no make'' - Enable ccache **(default)** 
 +    * ''NO_CCACHE=yes make'' - Disable ccache 
 +
 +  * ''COMPRESS_IMAGE'' - compress build image option
 +    * ''COMPRESS_IMAGE=no make'' - Don't compress **(default)**
 +    * ''COMPRESS_IMAGE=yes make'' - Compress image with xz
 +
 +  * ''BUILD_TYPE'' - image build type option
 +    * ''BUILD_TYPE=develop make'' - Develop build
 +    * ''BUILD_TYPE=release make'' - Release build
 +
 +===== Build in Docker =====
 +
 +You can also choose to build the OS image in a Docker container.
 +
 +==== Install Docker ====
 +
 +Please refer to [[https://docs.docker.com/engine/install/|Docker Documentation]].
 +
 +==== Add user to a Docker group ====
 +
 +```shell
 +$ sudo usermod -aG docker $USER
 +```
 +
 +<WRAP important >
 +You must log out or reboot the system for this change to take effect. 
 +</WRAP>
 +
 +
 +==== Check Docker ====
 +
 +```shell
 +$ docker run hello-world
 +```
 +
 +If you see the following output, Docker has been installed successfully:
 +
 +```txt
 +Unable to find image 'hello-world:latest' locally
 +latest: Pulling from library/hello-world
 +ca4f61b1923c: Pull complete
 +Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
 +Status: Downloaded newer image for hello-world:latest
 +
 +Hello from Docker!
 +This message shows that your installation appears to be working correctly.
 +
 +To generate this message, Docker took the following steps:
 + 1. The Docker client contacted the Docker daemon.
 + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 +    (amd64)
 + 3. The Docker daemon created a new container from that image which runs the
 +    executable that produces the output you are currently reading.
 + 4. The Docker daemon streamed that output to the Docker client, which sent it
 +    to your terminal.
 +
 +To try something more ambitious, you can run an Ubuntu container with:
 + $ docker run -it ubuntu bash
 +
 +Share images, automate workflows, and more with a free Docker ID:
 + https://cloud.docker.com/
 +
 +For more examples and ideas, visit:
 + https://docs.docker.com/engine/userguide/
 +```
 +
 +==== Build Fenix in Docker ====
 +
 +Pull the Docker image:
 +
 +```shell
 +$ cd ~/project/fenix
 +$ docker pull numbqq/fenix:latest
 +```
 +
 +Build the image in Docker:
 +
 +```shell
 +$ docker run -it --name fenix -v $(pwd):/home/khadas/fenix \
 +             -v /etc/localtime:/etc/localtime:ro \
 +             -v /etc/timezone:/etc/timezone:ro \
 +             -v $HOME/.ccache:/home/khadas/.ccache --privileged \
 +             --device=/dev/loop-control:/dev/loop-control \
 +             --device=/dev/loop0:/dev/loop0 --cap-add SYS_ADMIN \
 +             numbqq/fenix
 +```
 +Start your build from inside the Docker container:
 +
 +```shell
 +khadas@919cab43f66d:~/fenix$ source env/setenv.sh
 +khadas@919cab43f66d:~/fenix$ make
 +```
 +
 +Restart the Docker container:
 +
 +```shell
 +$ docker start fenix
 +$ docker exec -ti fenix bash
 +```
Last modified: 2022/07/04 22:16 by nick