Common Setup and Tools

Host

These are host ready tools installation for Ubuntu 18.04 LTS on 64 bit

$ apt-get update
$ apt-get install flex bison libsdl2-dev libssl-dev u-boot-tools git
$ apt-get install dtc python python-dev ia32-libs lib32ncurses5 lib32z1 swig xz
$ apt-get install gcc-arm-none-eabi

Crosstool

ARM

bash> cd /to/path
bash> wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/arm-linux-gnueabi/gcc-linaro-6.3.1-2017.02-i686_arm-linux-gnueabi.tar.xz
bash> tar xvf gcc-linaro-6.3.1-2017.02-i686_arm-linux-gnueabi.tar.xz
bash> export PATH=/to/path/gcc-linaro-6.3.1-2017.02-i686_arm-linux-gnueabi/bin:$PATH
bash> export CROSS_COMPILE=arm-linux-gnueabi-

ARM64

bash> cd /to/path
bash> wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.02-i686_aarch64-linux-gnu.tar.xz
bash> tar xvf gcc-linaro-6.3.1-2017.02-i686_aarch64-linux-gnu.tar.xz
bash> export PATH=/to/path/gcc-linaro-6.3.1-2017.02-i686_aarch64-linux-gnu/bin:$PATH
bash> export CROSS_COMPILE=aarch64-linux-gnu-

Rockchip

rkdeveloptool

sudo apt-get install libudev-dev libusb-1.0-0-dev dh-autoreconf
git clone https://github.com/rockchip-linux/rkdeveloptool
cd rkdeveloptool
sudo autoreconf -i
sudo make
sudo make install

If you encounter compile error like below:

./configure: line 4269: syntax error near unexpected token `LIBUSB1,libusb-1.0'
./configure: line 4269: `PKG_CHECK_MODULES(LIBUSB1,libusb-1.0)'

then:

sudo apt-get install pkg-config libusb-1.0
sudo autoreconf -i
sudo make
sudo make install

SD Setup

Single partition

$ fdisk /dev/mmcblk0


Welcome to fdisk (util-linux 2.27.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.



Command (m for help): n

To create more partitions, first replace a primary with an extended partition.


Command (m for help): p

Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Device         Boot Start      End  Sectors  Size Id Type

/dev/mmcblk0p1       2048 31116287 31114240 14.9G 83 Linux


Command (m for help): d

Selected partition 1

Partition 1 has been deleted.


Command (m for help): p

Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Command (m for help): n

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p):


Using default response p.

Partition number (1-4, default 1):

First sector (2048-31116287, default 2048):

Last sector, +sectors or +size{K,M,G,T,P} (2048-31116287, default 31116287):


Created a new partition 1 of type 'Linux' and of size 14.9 GiB.


Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.


$ mkfs.ext4 -L rootfs /dev/mmcblk0p1

Falcon partition

$ fdisk /dev/mmcblk0


Welcome to fdisk (util-linux 2.27.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.



Command (m for help): p

Disk /dev/mmcblk0: 14.4 GiB, 15489564672 bytes, 30253056 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Command (m for help): q


$ sfdisk /dev/mmcblk0


Welcome to sfdisk (util-linux 2.27.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.


Checking that no-one is using this disk right now ... OK


Disk /dev/mmcblk0: 14.4 GiB, 15489564672 bytes, 30253056 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Old situation:


Type 'help' to get more information.


>>> 30M,

Created a new DOS disklabel with disk identifier 0x13e85f5a.

Created a new partition 1 of type 'Linux' and of size 14.4 GiB.

/dev/mmcblk0p1 :        20480     30253055 (14.4G) Linux

/dev/mmcblk0p2: write


New situation:


Device         Boot Start      End  Sectors  Size Id Type

/dev/mmcblk0p1      20480 30253055 30232576 14.4G 83 Linux


The partition table has been altered.


Calling ioctl() to re-read partition table.

$ mkfs.ext4 -L rootfs /dev/mmcblk0p1

Dual partition

$ fdisk /dev/mmcblk0


Welcome to fdisk (util-linux 2.27.1).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.



Command (m for help): p

Disk /dev/mmcblk0: 14.4 GiB, 15489564672 bytes, 30253056 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Command (m for help): n

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p):


Using default response p.

Partition number (1-4, default 1):

First sector (2048-30253055, default 2048):

Last sector, +sectors or +size{K,M,G,T,P} (2048-30253055, default 30253055): +64M


Created a new partition 1 of type 'Linux' and of size 64 MiB.


Command (m for help): n

Partition type

   p   primary (1 primary, 0 extended, 3 free)

   e   extended (container for logical partitions)

Select (default p):


Using default response p.

Partition number (2-4, default 2):

First sector (133120-30253055, default 133120):

Last sector, +sectors or +size{K,M,G,T,P} (133120-30253055, default 30253055):


Created a new partition 2 of type 'Linux' and of size 14.4 GiB.


Command (m for help): p

Disk /dev/mmcblk0: 14.4 GiB, 15489564672 bytes, 30253056 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Device         Boot  Start      End  Sectors  Size Id Type

/dev/mmcblk0p1        2048   133119   131072   64M 83 Linux

/dev/mmcblk0p2      133120 30253055 30119936 14.4G 83 Linux


Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

$ mkfs.vfat -n BOOT /dev/mmcblk0p1

$ mkfs.ext4 -L rootfs /dev/mmcblk0p2

Console Setting

We use minicom to get serial console.

SUNXI

sunxi-fel

$ git clone https://github.com/openedev/sunxi-tools
$ cd sunxi-tools
$ git checkout -b working origin/working
$ make

boot32-fel.scr

$ boot32-fel.cmd
setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p1 rootwait
bootz $kernel_addr_r - $fdt_addr_r
# ./tools/mkimage -C none -A arm -T script -d boot32-fel.cmd boot.scr
Image Name:
Created:      Fri Nov 24 14:29:56 2017
Image Type:   ARM Linux Script (uncompressed)
Data Size:    121 Bytes = 0.12 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 113 Bytes = 0.11 KiB = 0.00 MiB

boot64-fel.scr

$ boot64-fel.cmd
setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p1 rootwait
booti $kernel_addr_r - $fdt_addr_r
# ./tools/mkimage -C none -A arm -T script -d boot64-fel.cmd boot.scr
Image Name:
Created:      Fri Nov 24 14:29:56 2017
Image Type:   ARM Linux Script (uncompressed)
Data Size:    121 Bytes = 0.12 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 113 Bytes = 0.11 KiB = 0.00 MiB

Virtual disk

# dd if=/dev/zero of=zero.bin bs=1024 count=1024
1024+0 records in
1024+0 records out
# du -hs zero.bin
1.0M    zero.bin
# losetup /dev/loop0 zero.bin
# losetup -a
/dev/loop0: 0 zero.bin
# mke2fs -F -m0 /dev/loop0
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
128 inodes, 1024 blocks
0 blocks (0%) reserved for the super user
First data block=1
Maximum filesystem blocks=262144
1 block groups
8192 blocks per group, 8192 fragments per group
128 inodes per group
# mount -t ext4 /dev/loop0 /mnt/
[  293.048823] EXT4-fs (loop0): mounted filesystem without journal. Opts: (null)
# ls /mnt/
lost+found
# mount
/dev/loop0 on /mnt type ext4 (rw,relatime,block_validity,delalloc,barrier,user_xattr,acl)
# cd /mnt/
# ls
lost+found
# cp /etc/wpa_supplicant.conf .
# ls
lost+found           wpa_supplicant.conf
# cd -
/root
# sync
# umount  /mnt/
# losetup -d /dev/loop0

Network

TFTP

Install package

$ sudo apt-get install xinetd tftpd tftp

Create /etc/xinetd.d/tftp and put this entry

service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /tftpboot
disable         = no
}

Create a folder /tftpboot this should match whatever you gave in server_args

$ sudo mkdir /tftpboot
$ sudo chmod -R 777 /tftpboot
$ sudo chown -R nobody /tftpboot

Build images from here and copy on /tftpboot, example rk3288-vyasa board

$ cp /path/to/linux-next/arch/arm/boot/uImage /tftpboot
$ cp /path/to/linux-next/arch/arm/boot/dts/rk3288-vyasa.dtb /tftpboot

Setup Host IP address, remember this is compatible with target serverip

$ ifconfig eth0 10.39.66.9 netmask 255.255.255.0 up

Restart the xinetd service

$ sudo service xinetd restart