Open main menu

DAVE Developer's Wiki β

Changes

no edit summary
<section begin="History" />
{| style="border-collapse:collapse; "
!colspan="4" style="width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History
|-
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Version!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|X.Y.Z{{oldid|14312|2021/07/20}}|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Month Year|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; borderFirst DESK-bottom:solid 2px #73B2C7; backgroundMX6UL-color:#edf8fb; padding:5px; color:#000000"|TBDL release
|-
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |{{oldid|16327|2022/03/16}}
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |DESK-MX6UL-L 3.0.0 release
|-
|! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fbededed; padding:5px; color:#000000"|[TBD_link X.Y.Z]2023/05/05|! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fbededed; padding:5px; color:#000000"|Month Year|style="borderDESK-left:solid 2px #73B2C7; borderMX6UL-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|TBDL 4.0.0 release
|-
|}
<section end="History" />
__FORCETOC__
<section begin="Body" />
==How to create a bootable SD card==
{{ImportantMessage|text=The procedure described here was tested with a physical machine. In case of a virtual machine such as the [[Managed_Virtual_Machine_(MVM)|MVM]], it might not work properly. Also, it is worth remembering that The USB controller of the MVM is disabled should be enabled by default. See also [[MVM_FAQs#Q:_How_to_use_the_USB_devices_connected_to_the_host_machine.3F|this section]]If you are using Linux-based distribution and are having trouble detecting a USB device in virtual machine, please make sure your user belongs to the ''vboxusers'' group.}}
This article shows how to create a bootable microSD for the [[DESK-MX6UL-L/General/Release_Notes_(DESK-MX6UL-L)Release_Notes|DESK-MX6UL-L Release Notes]] kit by using a simple bash script. <br>'''Note:''' Note: Starting from this '''DESK-MX6UL-L 1.0.1''' release the support for the SPL has been introduced in UbootU-Boot. Previous versions of this script will no longer produce a fully functional and bootable microSD card. <br>
The procedure has been tested on a Linux PC running Ubuntu LTS (>=MVM released with '''TBDDESK-MX6UL-L 4.0.1'') distribution ' release with *a 16 32 GB microSD card [1]*a USB SD card reader*the binary files delivered along with the [[Axel_Embedded_Linux_Kit_(XELK)DESK-MX6UL-L/General/Release_Notes#Downloadable_binary_imagesDownloadable_binary_images_3|DESKMX6ULDESK-MX6UL-L ''14.x0.x''0]].The resulting card is partitioned as depicted [[Axel_Embedded_Linux_Kit_(XELK)#XELK_microSD_Layout|here]].below:
* bootable partition (mmcblk0p1, vfat) containing:** binary images (U-Boot and kernel images)* root file system partition (mmcblk0p2, ext3)** root file system binaries and init scripts The script - named <code>mksd.sh</code> - looks like thiscan be realized with the following code:
<pre>
TBD #!/bin/bash if [[ -z $1 || -z $2 || -z $3 || -z $4 || -z $5 ]] then echo "$0 Usage: cat " echo " $0 <device> <u-boot.img> <SPL> <binaries directory> <rootfs tar.bz2>" echo " Example: $0 /dev/sdc u-boot.img SPL binaries/ rootfs.tar.bz2" exit fi if [ "$(whoami)" != "root" ]then echo "you must be root to run this script!" exit fi if ! [[ -b $1 ]]then echo "$1 is not a valid block device!" exitfi if ! [[ -e $2 ]]then echo "Incorrect u-boot.img location!" exit fi if ! [[ -e $3 ]] then echo "Incorrect SPL location!" exitfi if ! [[ -d $4 ]]then echo "Incorrect Binaries location!" exit fi  if ! [[ -f $5 ]] then echo "Incorrect rootfs location!" exit fi DRIVE=$1if [[ "$DRIVE" == *"mmcblk"* ]] then echo "You're using a mmc device, I need to fix partition names" PART="p"else PART=""fi UBOOT=$2 SPL=$3BINARIES=$4 RFS=$5  echo "All data on "$DRIVE" now will be destroyed! Continue? [y/n]"read ans if ! [ $ans == 'y' ]then exitfi echo "[Partitioning $1...]" dd if=/dev/zero of mksd=$DRIVE bs=1024 count=1024 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` echo DISK SIZE - $SIZE bytes CYLINDERS=`echo $SIZE/255/63/512 | bc` # check if we're running an old (e.g. 2.20.x) or new (e.g.sh script2.24.x) sfdisksfdisk --help | grep -- -H if [ "$?" -eq "0" ]then { echo 40,1380,0x0c,* echo 1420,,83,- } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVEelse{ echo 16M,8176M,0x0c,* echo 8192M,,83,-} | sfdisk $DRIVEfi partprobe  echo "[Making filesystems...]"mkfs.vfat -F 32 -n BOOT "$DRIVE$PART"1 #> /dev/nullmkfs.ext3 -F -L ROOTFS "$DRIVE$PART"2 #> /dev/null # wait for the VM to recognize the uSDsleep 60 echo "[Copying files...]" binaries_dir=${BINARIES%/}mount "$DRIVE$PART"1 /mntcp -av --no-preserve=ownership $binaries_dir/* /mnt/umount "$DRIVE$PART"1 echo "[Extracting rfs (this may take a while...)]"mount "$DRIVE$PART"2 /mnttar jxf $RFS -C /mnt > /dev/nullchmod 755 /mntumount "$DRIVE$PART"2 echo "[Programming SPL]"dd if=$SPL of=$DRIVE bs=512 seek=2 conv=fsync echo "[Programming u-boot.img]"dd if=$UBOOT of=$DRIVE bs=1k seek=69 conv=fsync echo "[Done]"
</pre>
Here is an example that shows how to use this script. We use here files delivered with [[DESK-MX6UL-L/General/Release_Notes#Downloadable_binary_images_3|DESK-MX6UL-L 4.0.0]] release. Before invoking the script, the following files has to be renamed in order to make them compatible with the default U-Boot environment variables:
* bootscript: <code>boot.scr</code>
* splash image: <code>splash_image.bmp</code>
* Linux kernel: <code>desk-mx6ul-l-4.0.0_uImage</code>
* Device tree blob: <code>desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb</code>.
Here is an example that shows how to use this scriptIn the case of you don't have some file on MVM, please download it from [https://mirror.dave.eu/desk-mx-l mirro. Let's assume that the binary files were downloaded in the dave.eu].  We will copy them into <code>~/desk-mx-l/desk</code> subdirectory of the working directory. Before invoking the script, the following Needed binary files has to can be renamed in order to make them compatible with the default U-Boot environment variables:* bootscript: found on <code>boot.scrMVM</code>* Linux kernelin the following location: <code>uImage</code>* Device tree blob: <code>''carrier''.dtb</code>.
This is the list of the binary files that will be used by the script:
<pre>
dvdk@vagrant:~$ ll /tftpboot/desk-mx6ul-l/total 11352-rw-r--r-- 1 dvdk root 32964 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-axelulite-cb003a.dtb-rw-r--r-- 1 dvdk root 32002 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-axelulite-cb006c.dtb-rw-r--r-- 1 dvdk root 33028 Mar 31 11:01 desk-mx6ul-l-4.0.0-imx6ul-lynx-som0013-cb002f.dtb-rw-r--r-- 1 dvdk root 8017976 Mar 31 11:01 desk-mx6ul-l-4.0.0-uImage-rw-r--r-- 1 dvdk root 35840 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_SPL-rw-r--r-- 1 dvdk root 48128 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_spi_SPL-rw-r--r-- 1 dvdk root 552184 Mar 31 11:00 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_spi_u-boot.img-rw-r--r-- 1 dvdk root 551704 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_axelulite_u-boot.img-rw-r--r-- 1 dvdk root 35840 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_SPL-rw-r--r-- 1 dvdk root 48128 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_spi_SPL-rw-r--r-- 1 dvdk root 517248 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_spi_u-boot.img-rw-r--r-- 1 dvdk root 516776 Mar 31 10:59 desk-mx6ul-l-4.0.0-mx6uldesk_lynx_u-boot.img-rw-r--r-- 1 dvdk root 1152054 Mar 31 10:59 splash_image.bmpdvdk@vagrant:~$ mkdir -p ~/desk-{{{kit}}}mx-l/deskdvdk@vagrant:~$ ls cp /tftpboot/desk-lamx6ul-l/desk-mx6ul-l-4.0.0_uImage ~/desk-mx-l/desk/desk-mx6ul-l-4.0.0_uImagedvdk@vagrant:~$ cp /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb ~/desk-mx-l/desk/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtbdvdk@vagrant:~$ cp /tftpboot/desk-mx6ul-l/splash_image.bmp ~/desk-mx-l/desk/TBD directory listingdvdk@vagrant:~$ cp ~/desk-mx-l/boot.scr ~/desk-mx-l/desk/boot.scrdvdk@vagrant:~$ cp ~/desk-mx-l/rfs/desk-mx6ul-l-4.0.0_modules.tar.gz ~/desk-mx-l/desk/
</pre>
 
You can now run the script, by passing the following parameters:
*Device file of the microSD card (<code>/dev/sdcsdb</code> in the example)
*U-Boot image
*SPL
*Archive of the target's root file system (compressed as <code>.tar.bz2</code> file).
<pre>
dvdk@vagrant:~/desk-{{{kit}}}mx-l$ sudo umount /dev/sdb*dvdk@vagrant:~/desk-mx-l$ sudo ./mksddesk-mx6ul-l-4.0.1_mksd.sh /dev/sd<x> <usdb /tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_mx6uldesk_axelulite_u-boot.img/tftpboot/desk-mx6ul-l/desk-mx6ul-l-4.0.0_mx6uldesk_axelulite_SPL ~/desk-mx-l/desk ./rfs/desk-mx6ul-l-4.0.1_dave-image-devel-desk-mx6ul.tar.bz2 All data on /dev/sdb now will be destroyed! Continue? [y/n]y [Partitioning /dev/sdb...]1024+0 records in 1024+0 records out1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.262305 s, 4.0 MB/sDISK SIZE - 31002198016 bytesChecking that no-one is using this disk right now ... OK Disk /dev/sdb: 28.89 GiB, 31002198016 bytes, 60551168 sectorsDisk model: Transcend Units: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes > <SPL> <binaries_dir>Created a new DOS disklabel with disk identifier 0x937180d6./dev/sdb1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 8 GiB./dev/sdb2: Created a new partition 2 of type 'Linux' and of size 20.9 GiB./dev/sdb3: Done. New situation:Disklabel type: dosDisk identifier: 0x937180d6 Device Boot Start End Sectors Size Id Type/dev/sdb1 * 32768 16777215 16744448 8G c W95 FAT32 (LBA)/dev/sdb2 16777216 60551167 43773952 20.9G 83 Linux The partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.[Making filesystems...]mkfs.fat 4.1 (2017-01-24)mke2fs 1.45.5 (07-Jan-2020)/dev/sdb2 contains a ext3 file system labelled 'ROOTFS' created on Mon Apr 3 10:19:52 2023Creating filesystem with 5471744 4k blocks and 1368064 inodesFilesystem UUID: a0208180-9d1c-47e8-a8e0-c92a63a7059aSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: doneWriting inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done [Copying files...]'/home/dvdk/ <rfs_filenamedesk-mx-l/desk/boot.scr' ->'/mnt/boot.scr''/home/dvdk/desk-mx-l/desk/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb' -> '/mnt/desk-mx6ul-l-4.0.0_imx6ul-axelulite-cb003a.dtb''/home/dvdk/desk-mx-l/desk/desk-mx6ul-l-4.0.0_uImage' -> '/mnt/desk-mx6ul-l-4.0.0_uImage'TBD '/home/dvdk/desk-mx-l/desk/splash_image.bmp' -> '/mnt/splash_image.bmp'[Extracting rfs (this may take a while...)][Programming SPL]70+0 records in70+0 records out35840 bytes (36 kB, 35 KiB) copied, 0.0120358 s, 3.0 MB/s[Programming u-boot.img]538+1 records in538+1 records out551704 bytes (552 kB, 539 KiB) copied, 0.164175 s, 3.4 MB/s[Done]
</pre>
 
[1] In case you have a different size, you'll need to change the <code>sfdisk</code> parameters accordingly.
===bootscr ===
Once you got the new binaries compiled from your modified sources, they have to be installed on first SD partition preserving the original file names used into <i>boot.scr</i> uU-boot Boot bootscript.
Here below there is an example on how to create a <code>boot.scr</code> file from the '''bootscript.txt''' for booting from SD card:
 
''TBD: bootscript.txt dump''
<pre>
echo 'bootscript generated with command "mkimage -A ARM -T script -C none -n AXEL-Lite-DESK-SBCX MX6UL -d bootscript.txt boot.scr"'
setenv desk_release 'desk-mx6mx6ul-l-14.0.0'
if test 0x${som_configid#} = 0x00000013 && test 0x${cb_configid#} = 0x000000120x0000002f;
then
if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-sbcx_imx6ul-cb0012.dtb else setenv fdtfile ${desk_release}_imx6qlynx-sbcxsom0013-cb0012cb002f.dtb fielif test 0x${cb_configid#} = 0x00000013;0x0000003a
then
if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl_imx6ul-sbcxaxelulite-cb0013cb003a.dtb else setenv fdtfile ${desk_release}_imx6q-sbcx-cb0013.dtb fielif test 0x${cb_configid#} = 0xffffffff;0x0000006c
then
if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl_imx6ul-deskaxelulite-l-2.0.0.dtb else setenv fdtfile ${desk_release}_imx6q-desk-l-2.0.0cb006c.dtb fi
else
echo Invalid CB! Autoreset ...
setenv mmc_loadfdt 'fatload mmc ${mmcdev}:1 ${fdtaddr} ${fdtfile}'
echo Booting AxelLite-DESK-SBCX MX6UL via mmcboot with ${fdtfile} as device tree
run mmcboot
<pre>
mkimage -A ARM -T script -C none -n AXEL-Lite-DESK-SBCX MX6UL -d bootscript.txt boot.scr
</pre>
Then copy the ''boot.scr'' into the <code><binaries_dir></code> directories used by the script to create the SD card.
 
===Install Module===
 
To install kernel modules, follow the steps below.
 
<pre>
root@desk-mx6ul-axelulite:~# sudo mount /dev/mmcblk0p1 /media
root@desk-mx6ul-axelulite:~# tar xvzf /media/desk-mx6ul-l-4.0.0_modules.tar.gz -C /
</pre>
 
After installation, run the following command to verify that the installation was successful:
 
<pre>
root@desk-mx6ul-axelulite:~# ls -l /lib/modules/$(uname -r)
total 300
lrwxrwxrwx 1 541 502 65 Apr 3 2023 build -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel
drwxr-xr-x 6 541 502 4096 Apr 3 2023 kernel
-rw-r--r-- 1 541 502 2718 Apr 3 2023 modules.alias
-rw-r--r-- 1 541 502 4768 Apr 3 2023 modules.alias.bin
-rw-r--r-- 1 541 502 14878 Apr 3 2023 modules.builtin
-rw-r--r-- 1 541 502 34704 Apr 3 2023 modules.builtin.alias.bin
-rw-r--r-- 1 541 502 17778 Apr 3 2023 modules.builtin.bin
-rw-r--r-- 1 541 502 105373 Apr 3 2023 modules.builtin.modinfo
-rw-r--r-- 1 541 502 10689 Apr 3 2023 modules.dep
-rw-r--r-- 1 541 502 21666 Apr 3 2023 modules.dep.bin
-rw-r--r-- 1 541 502 0 Apr 3 2023 modules.devname
-rw-r--r-- 1 541 502 8657 Apr 3 2023 modules.order
-rw-r--r-- 1 541 502 85 Apr 3 2023 modules.softdep
-rw-r--r-- 1 541 502 16970 Apr 3 2023 modules.symbols
-rw-r--r-- 1 541 502 23964 Apr 3 2023 modules.symbols.bin
lrwxrwxrwx 1 541 502 65 Apr 3 2023 source -> /home/jenkins/workspace/workspace/DESK-MX6UL-L-4.x.x_Linux-kernel
</pre>
----
[[Category:AXEL ULite]]
8,226
edits