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|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"14119|Month Year2021/07/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"|TBDFirst DESK 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|16989|2022/03/04}}
| 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-MX6-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/04/27|! 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; borderMX6-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-MX6-L/General/Release_Notes_(DESK-MX6-L)Release_Notes|DESK-MX6-L Release Notes]] kit by using a simple bash script. <br>'''Note:''' Starting from this '''DESK-MX6-L 1.0.0''' 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 '''DESK-MX6-L 4.0.0'TBD'') 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-MX6-L/General/Release_Notes#Downloadable_binary_images|DESKMX6DESK-MX6-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" exitfi if [ "$(whoami)" != "root" ]then echo "you must be root to run this script!" exitfi if ! [[ -b $1 ]]then echo "$1 is not a valid block device!" exitfi if ! [[ -e $2 ]]then echo "Incorrect u-boot.img location!" exitfi if ! [[ -e $3 ]]then echo "Incorrect SPL location!" exitfi if ! [[ -d $4 ]]then echo "Incorrect Binaries location!" exitfi if ! [[ -f $5 ]]then echo "Incorrect rootfs location!" exitfi DRIVE=$1if [[ "$DRIVE" == *"mmcblk"* ]]then echo "You're using a mmc device, I need to fix partition names" PART="p"else PART=""fiUBOOT=$2SPL=$3BINARIES=$4RFS=$5 echo "All data on "$DRIVE" now will be destroyed! Continue? [y/n]"read ansif ! [ $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. Let's assume that the binary We use here files were downloaded in the <code>desk<delivered with [[DESK-MX6-L/code> subdirectory of the working directoryGeneral/Release_Notes#Downloadable_binary_images|DESK-MX6-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>uImagedesk-mx6-l-4.0.0_uImage</code>* Device tree blob: <code>''carrier''desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtb</code>. In the case of you don't have some file on MVM, please download it from [https://mirror.dave.eu/desk-mx-l/ mirror.dave.eu].
This is the list of the We will copy them into <code>~/desk-mx-l/desk</code> directory. Needed binary files that will can be used by found on <code>MVM</code> in the scriptfollowing location:
<pre>
dvdk@vagrant:~$ ll /tftpboot/desk-mx6-l/total 11360drwxr-xr-x 2 dvdk root 4096 Apr 3 17:57 ./drwxr-xr-x 3 dvdk root 4096 Apr 4 07:16 ../-rw-r--r-- 1 dvdk root 52247 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtb-rw-r--r-- 1 dvdk root 52560 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-sbcx-cb0013.dtb-rw-r--r-- 1 dvdk root 52161 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-sbcx-cb0018.dtb-rw-r--r-- 1 dvdk root 53231 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-sbcx-cb0050.dtb-rw-r--r-- 1 dvdk root 52536 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-sbcx-cb0055.dtb-rw-r--r-- 1 dvdk root 48736 Apr 3 17:38 desk-mx6-l-4.0.0_imx6dl-xelk-l.dtb-rw-r--r-- 1 dvdk root 53524 Apr 3 17:38 desk-mx6-l-4.0.0_imx6q-sbcx-cb0012.dtb-rw-r--r-- 1 dvdk root 53833 Apr 3 17:38 desk-mx6-l-4.0.0_imx6q-sbcx-cb0013.dtb-rw-r--r-- 1 dvdk root 50177 Apr 3 17:38 desk-mx6-l-4.0.0_imx6q-xelk-l-2-0-0.dtb-rw-r--r-- 1 dvdk root 50009 Apr 3 17:38 desk-mx6-l-4.0.0_imx6q-xelk-l.dtb-rw-r--r-- 1 dvdk root 56320 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_SPL-rw-r--r-- 1 dvdk root 56320 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_nand_SPL-rw-r--r-- 1 dvdk root 576288 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_nand_u-boot.img-rw-r--r-- 1 dvdk root 56320 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_spi_SPL-rw-r--r-- 1 dvdk root 554004 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_spi_u-boot.img-rw-r--r-- 1 dvdk root 576000 Apr 3 17:38 desk-mx6-l-4.0.0_mx6qdldesk_u-boot.img-rw-r--r-- 1 dvdk root 8038640 Apr 3 17:38 desk-mx6-l-4.0.0_uImage-rw-r--r-- 1 dvdk root 1152054 Apr 3 17:38 splash_image.bmpdvdk@vagrant:~$ ll ~/desk-{{{kit}}}mx-l/desk-mx6-l-4.0.0_boot.scr -rw-rw-r-- 1 dvdk dvdk 1556 Apr 3 17:57 /home/dvdk/desk-mx-l/desk-mx6-l-4.0.0_boot.scrdvdk@vagrant:~$ ls mkdir -lap ~/desk-mx-l/desk/dvdk@vagrant:~$ cp /tftpboot/desk-mx6-l/desk-mx6-l-4.0.0_uImage ~/desk-mx-l/desk/desk-mx6-l-4.0.0_uImageTBD directory listingdvdk@vagrant:~$ cp /tftpboot/desk-mx6-l/desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtb ~/desk-mx-l/desk/desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtbdvdk@vagrant:~$ cp ~/desk-mx-l/desk-mx6-l-4.0.0_boot.scr ~/desk-mx-l/desk/boot.scrdvdk@vagrant:~$ cp /tftpboot/desk-mx6-l/splash_image.bmp ~/desk-mx-l/desk/dvdk@vagrant:~$ cp ~/desk-mx-l/rfs/desk-mx6-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
*Path of the directory containing the bootscript file, the splash image, the Linux kernel image, and the device tree blob files
*Archive of the target's root file system (compressed as <code>.tar.bz2</code> file).
<pre>
dvdk@vagrant:~/desk-mx-l$ umount /dev/sdb*dvdk@vagrant:~/desk-mx-l$ sudo ./desk-mx6-l-4.0.0_mksd.sh /dev/sdb /tftpboot/desk-mx6-l/desk-mx6-l-4.0.0_mx6qdldesk_u-boot.img /tftpboot/desk-mx6-l/desk-mx6-l-4.0.0_mx6qdldesk_SPL ~/desk-mx-l/desk ./rfs/desk-image-qt6-desk-mx6.tar.bz2 All data on /dev/sdb now will be destroyed! Continue? [y/n]y[Partitioning /dev/sdb...]1024+0 records in1024+0 records out1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.228364 s, 4.6 MB/sDISK SIZE - 31914983424 bytesChecking that no-one is using this disk right now ... OK Disk /dev/sdb: 29.74 GiB, 31914983424 bytes, 62333952 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 >>> Created a new DOS disklabel with disk identifier 0xeba9791f./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 21.7 GiB./dev/sdb3: Done. New situation:Disklabel type: dosDisk identifier: 0xeba9791f Device Boot Start End Sectors Size Id Type/dev/sdb1 * 32768 16777215 16744448 8G c W95 FAT32 (LBA)/dev/sdb2 16777216 62333951 45556736 21.7G 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)Creating filesystem with 5694592 4k blocks and 1425408 inodesFilesystem UUID: 2b7edb0e-b75b-4685-87b9-1933bfd0c8f0Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done  [Copying files...]'/home/dvdk/desk-mx-l/desk/boot.scr' -> '/mnt/boot.scr''/home/dvdk/desk-mx-l/desk/desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtb' -> '/mnt/desk-mx6-l-4.0.0_imx6dl-sbcx-cb0012.dtb''/home/dvdk/desk-mx-l/desk/desk-mx6-l-4.0.0_uImage' -> '/mnt/desk-mx6-l-4.0.0_uImage''/home/dvdk/desk-mx-l/desk/splash_image.bmp' -> '/mnt/splash_image.bmp'[Extracting rfs (this may take a while...)][Programming SPL]110+0 records in110+0 records out56320 bytes (56 kB, 55 KiB) copied, 0.0340295 s, 1.7 MB/s[Programming u-boot.img]562+1 records in562+1 records out576000 bytes (576 kB, 562 KiB) copied, 0.201931 s, 2.9 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> u-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: <pre>echo 'bootscript generated with command "mkimage -A ARM -T script -C none -n DESK-MX6 -d bootscript.txt boot.scr"' setenv desk_release 'desk-mx6-l-4.0.0' if test 0x${cb_configid#} = 0x00000002;then if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-sbcx.dtb else setenv fdtfile ${desk_release}_imx6q-sbcx.dtb fielif test 0x${cb_configid#} = 0x00000003;then if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-sbcx-cb0003.dtb else setenv fdtfile ${desk_release}_imx6q-sbcx-cb0003.dtb fielif test 0x${cb_configid#} = 0x00000012;then if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-sbcx-cb0012.dtb else setenv fdtfile ${desk_release}_imx6q-sbcx-cb0012.dtb fielif test 0x${cb_configid#} = 0x00000013;then if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-sbcx-cb0013.dtb else setenv fdtfile ${kitdesk_release}_imx6q-sbcx-cb0013.dtb fielif test 0x${cb_configid#}= 0x00000077;then if test ${cpu}= 6DL; then setenv fdtfile $ {desk_release}_imx6dl-sbcx-cb0077.dtb else setenv fdtfile ${desk_release}_imx6q-sbcx-cb0077.dtb fielif test 0x${cb_configid#} = 0x00000001;then if test ${cpu} = 6DL; then setenv fdtfile ${desk_release}_imx6dl-xelk-l.dtb else setenv fdtfile ${desk_release}_imx6q-xelk-l.dtb fielif test 0x${cb_configid#} = 0xffffffff;then setenv fdtfile ${desk_release}_imx6q-xelk-l-2-0-0.dtbelse echo Invalid CB! Autoreset ../mksd.sh sleep 30 resetfi setenv bootfile uImage setenv mmc_loadk 'fatload mmc ${mmcdev}:1 ${loadaddr} ${bootfile}'setenv mmc_loadfdt 'fatload mmc ${mmcdev}:1 ${fdtaddr} ${fdtfile}' echo Booting DESK-MX6 via mmcboot with ${fdtfile} as device tree run mmcboot echo mmcboot FAILURE</dev/sdpre> and compile it using: <xpre> <umkimage -A ARM -T script -C none -n DESK-MX6-L -d bootscript.txt boot.imgscr</pre>  Then copy the ''boot.scr'' into the <SPLcode> <binaries_dir></ code> directories used by the script to create the SD card. ===Install Module=== To install kernel modules, follow the steps below. <rfs_filenamepre>root@desk-mx6:~# sudo mount /dev/mmcblk0p1 /media root@desk-mx6:~# tar xvzf /media/desk-mx6-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-mx6:~# ls -l /lib/modules/$(uname -r)total 304lrwxrwxrwx 1 541 502 63 Apr 3 2023 build -> /home/jenkins/workspace/workspace/DESK-MX6-L-4.x.x_Linux-kerneldrwxr-xr-x 6 541 502 4096 Apr 3 2023 kernel-rw-r--r-- 1 541 502 2812 Apr 3 2023 modules.alias-rw-r--r-- 1 541 502 4926 Apr 3 2023 modules.alias.bin-rw-r--r-- 1 541 502 15368 Apr 3 2023 modules.builtin-rw-r--r-- 1 541 502 35496 Apr 3 2023 modules.builtin.alias.bin-rw-r--r-- 1 541 502 17986 Apr 3 2023 modules.builtin.bin-rw-r--r-- 1 541 502 107589 Apr 3 2023 modules.builtin.modinfoTBD -rw-r--r-- 1 541 502 10767 Apr 3 2023 modules.dep-rw-r--r-- 1 541 502 21773 Apr 3 2023 modules.dep.bin-rw-r--r-- 1 541 502 0 Apr 3 2023 modules.devname-rw-r--r-- 1 541 502 8733 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.binlrwxrwxrwx 1 541 502 63 Apr 3 2023 source -> /home/jenkins/workspace/workspace/DESK-MX6-L-4.x.x_Linux-kernel
</pre>
[1] In case you have === Attention !===* <code>/home/dvdk/desk-mx-l/desk-mx6-l-4.0.0_boot.scr</code> has been generated using the images available at the moment of VM creation: please, use the previous indication as an example on how to create a different size, you'll need to change the ''proper''' bootscript for your own purposes* <code>sfdisk/home/dvdk/desk-mx-l/desk-mx6-l-4.0.0_mksd.sh</code> bash script has been validated using a single SD card version: the size of the partitions and the related ''sfdisk'' parameters accordinglyhave to be properly modified according to your own SD card used and to your partitions specification.You can use it an an example to be modified according your use case
----
[[Category:AXEL Lite]]
8,226
edits