Follow these steps to update the Linux kernel image and device tree on the eMMC card.
NOTE: Below steps are valid for both LX2160ARDB Rev 1.0 and Rev 2.0 revisions.
Compiling Linux kernel images and device tree
- On Linux host, clone the repository with Linux kernel image and device tree:
$git clone https://source.codeaurora.org/external/qoriq/qoriq-components/linux
- $ cd Linux
- $ git checkout -b <new branch> <start point>
- For example, $ git checkout -b LSDK-20.04-V5.4 LSDK-20.04-V5.4
where LSDK-20.04-V5.4 refers to a tag in the format LSDK-<LSDK version>- V<kernel version>
- $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig lsdk.config
If you want to make changes to the device tree, open and edit arch/arm64/boot/dts/freescale/fsl-lx2160a-rdb.dts
You can make changes in the Linux kernel source code also if required.
- $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
The binary kernel image Image and compressed kernel image Image.gz are in arch/arm64/boot/.
The device tree blob fsl-lx2160a-rdb.dtb is in arch/arm64/boot/dts/freescale/.
Copying the compiled kernel images and device tree to the eMMC card
Step1: Copy the kernel images and device tree from Linux host machine
- Ensure the eMMC card available on the reference board.
- Check DIP switch settings for the desired boot type.
- Power on the board and let the board boot to LSDK distro prompt.
- In case LSDK image is not deployed on the storage device on the board, execute the following command under U-Boot prompt to boot the board to TinyDistro.
- For FlexSPI NOR boot: => run xspi_bootcmd
- For SD/eMMC boot: => run sd_bootcmd
- Log in to LSDK distro as root/root or TinyDistro as “root”.
- Bring up a network interface with Linux host.
-
Dynamic IP address assignment: # udhcpc -i <port name in Tiny/LSDKDistro>
-
Static IP address assignment:
# ifconfig <port name in Tiny/LSDKDistro> <IP address> netmask <netmask address> up
For example: # ifconfig enp1s0 192.168.2.120 netmask 255.255.255.0 up
- Copy the Kernel, Kernel.gz images and device tree blob fsl-lx2160a-rdb.dtb from host machine.
# mkdir <destination folder>
# scp <user>@<ipaddress>:<file path>/<filename> <destination folder>
For example:
# mkdir /kernelfiles
# scp user1@192.168.2.1:/tftpboot/Image.gz /kernelfiles
Step2: Copy the kernel image and device tree to the eMMC card
- sudo fdisk -l to list the disks that are accessible on board.
- Mount the eMMC card partition that contains Linux kernel images and device tree.
- NOTE:
-
Use the command cat /proc/partitions to see the list of devices, their partitions along with their sizes to make sure that the correct device and partition name have been chosen.
-
The eMMC storage drive in the Linux PC is detected as /dev/sdX, where X is a letter such as a, b, c. Make sure to choose the correct device name, because data on this device will be replaced.
-
If your Linux host machine supports read/write eMMC card directly without an extra eMMC card reader device, the device name of eMMC card is typically mmcblk1.
- In general, the Linux kernel images and device tree are stored in the second partition of the eMMC device (mmcblk1p2). For detail on storage layout on SD/eMMC/USB/SATA for LSDK images deployment, refer to section "LSDK memory layout and Userland" in Layerscape Software Development Kit User Guide.
# sudo mkdir <mount_folder>
# sudo mount /dev/sdX <mount_folder>
For example:
# sudo mkdir /carddata
# sudo mount /dev/mmcblk1p2 /carddata
- Replace Image, Image.gz, and fsl-lx2160a-rdb.dtb on the eMMC card with the new files copied in <destination folder> in the steps above.
# sudo cp <destination folder>/Image <destination folder>/Image.gz <destination folder>/fsl-lx2160a-rdb.dtb <mount_location>
For example: # sudo cp /kernelfiles/Image /kernelfiles/Image.gz /kernelfiles/fsl-lx2160a-rdb.dtb /carddata
- Unmount the card. for example: # sudo umount /dev/mmc1blk1p2
- Reboot the board. At U-Boot prompt, run the following command to boot the board to LSDK distro using eMMC card.
=> run bootcmd_mmc1
If U-Boot does not find LSDK on the eMMC card, it will boot TinyDistro from lsdk_linux_arm64_ tiny.itb stored on the eMMC card.