Changes

Jump to: navigation, search

Physical devices mapping (BELK/BXELK)

10,188 bytes added, 09:00, 31 January 2020
History
{{InfoBoxTop}}
{{Applies To Bora}}
{{Applies To BoraX}}
{{Applies To BoraLite}}
{{InfoBoxBottom}}
This article details how physical devices are handled by the Linux kernel in the context of the [[Bora_Embedded_Linux_Kit_(BELK)|BELK]] and [[BoraX_Embedded_Linux_Kit_(BXELK)|BXELK kit]]kits. == History =={| class="wikitable" border="1"!Version!Date!BELK/BXELK version!Notes|-|{{oldid|8547|1.0.0}}|Apr 2019|[[BELK/BXELK_software_components#BELK_3.0.2_.2F_BXELK_1.0.1|3.0.0]]|BELK 3.0.0|-|2.0.0|Jan 2020|[[BELK/BXELK_software_components#BELK_4.1.0|4.1.0]]|Updated for BELK/BXELK 4.1.0|-|} 
==Console UART==
{| class="wikitable"
|-
! Kit !! Physical device !! Processor's resource !! Connector !! Type !! Linux device file !! Notes|-| BELK || Boot Console || UART1 || J17 || 2-wire RS232 UART || <code>/dev/ttyPS0</code> ||
|-
| BXELK || Boot Console || UART1 || J17 || 2-wire RS232 UART || <code>/dev/ttyPS0</code> ||
|-
|}
==Ethernet==
Ethernet port is associated to <code>eth0</code> interfaceon the J8 connector. It can be managed with standard Linux commands. See for example http://www.tecmint.com/ifconfig-command-examples/.
==microSD card==
microSD cardon connector J21, if present, will be associated by the Linux kernel to the <code>mmcblk0</code> device:
<pre>
[ 24.100643] mmc0: new high speed SDHC card at address 1234
==NOR and NAND flash==
TBD ({{ImportantMessage|text=NOR and NAND flash memories cannot be used accessed at the same time because they shares some Zynq pins. In U-boot the switching between accesses to NOR and NAND is automatically done by U-boot itself. By default in kernel only NAND flash can be accessed. For NOR support in Linux)kernel please contact [mailto:support-bora@dave.eu technical support].}}
NOR and NAND flashes are managed as [[Memory_Tecnology_Device_(MTD)|MTD devices]].
Generally speaking, NAND flash memory is partitons partitions are defined using the kernel command line:<pre>Bora> pri mtdpartsmtdparts=mtdparts=pl35x-nand:256K(spl),768K(uboot),256K(env1),256K(env2),6M(fpga),512K(fdt),8M(kernel),-(nand-ubi)Bora></pre>adding <code>addmisc</code> to the <code>bootargs</code> parameters list. The kernel ''dmesg'' will configure the NAND partitions in the devitetreefollowing way
<pre>
partition@[ 1.148350] Creating 8 MTD partitions on "pl35x-nand":[ 1.153486] 0x000000000000-partition-table { label = 0x000000040000 : "nand-SPLspl"; reg = <0x0 0x80000>; }; partition@nand[ 1.170502] 0x000000040000-uboot { label = 0x000000100000 : "nand-uboot"; reg = <0x80000 0x80000>; }; partition@nand-uboot[ 1.186404] 0x000000100000-env1 { label = 0x000000140000 : "nand-uboot-env1"; reg = <0x100000 0x40000>; }; partition@nand-uboot[ 1.202301] 0x000000140000-env2 { label = 0x000000180000 : "nand-uboot-env2"; reg = <0x140000 0x40000>; }; partition@nand[ 1.218170] 0x000000180000-bitstream { label = 0x000000780000 : "nand-bitstreamfpga"; reg = <0x180000 0x440000>; }; partition@nand-device[ 1.229456] 0x000000780000-tree { label = 0x000000800000 : "nand-device-treefdt"; reg = <0x5C0000 0x40000>; }; partition@nand[ 1.237981] 0x000000800000-linux { label = 0x000001000000 : "nand-linuxkernel"; reg = <0x600000 0x400000>; }; partition@nand[ 1.244063] 0x000001000000-rootfs { label = 0x000040000000 : "nand-rootfsubi"; reg = <0xA00000 0x1F600000>; };
</pre>
defines these partitions:
<pre>
root@bora:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00040000 00020000 "nand-SPLspl"mtd1: 00080000 000c0000 00020000 "nand-uboot"mtd2: 00040000 00020000 "nand-uboot-env1"mtd3: 00040000 00020000 "nand-uboot-env2"mtd4: 00440000 00600000 00020000 "nand-bitstreamfpga"mtd5: 00040000 00080000 00020000 "nand-device-treefdt"mtd6: 00400000 00800000 00020000 "nand-linuxkernel"mtd7: 1f600000 3f000000 00020000 "nand-rootfsubi"</pre> ==USB OTG=====Host mode=== For the USB Host mode an USB stick or another device must be pluged in at the system boot. See the issue related to USB not hotplug capable after the system boot. This example shows how a memory stick is detected by the Linux kernel.<pre>root@bora:~# [ 37.340873] usb 1-1: new high-speed USB device number 2 using zynq-ehci[ 37.508377] usb 1-1: device v05e3 p0736 is not supported[ 37.514823] usb-storage 1-1:1.0: USB Mass Storage device detected[ 37.521869] scsi host0: usb-storage 1-1:1.0[ 38.522235] scsi 0:0:0:0: Direct-Access Generic STORAGE DEVICE 0272 PQ: 0 ANSI: 0[ 38.531274] sd 0:0:0:0: Attached scsi generic sg0 type 0[ 38.663662] sd 0:0:0:0: [sda] 30679040 512-byte logical blocks: (15.7 GB/14.6 GiB)[ 38.673145] sd 0:0:0:0: [sda] Write Protect is off[ 38.677862] sd 0:0:0:0: [sda] Mode Sense: 0b 00 00 08[ 38.684026] sd 0:0:0:0: [sda] No Caching mode page found[ 38.689257] sd 0:0:0:0: [sda] Assuming drive cache: write through[ 38.703539] sda: sda1 sda2[ 38.715870] sd 0:0:0:0: [sda] Attached SCSI removable disk</pre>To connect it to micro AB connector (J19), a cable like the one shown in the following picture has been used [1]. [[File:Usb-cable-micro-host.jpg|thumb|center|USB cable used to connect memory stick]]  Once mounted (at <code>mnt/sda1</code> in the example), the memory stick can be accessed by regular commands:<pre>root@bora:~# mount /dev/sda1 /mnt/sda1/root@bora:~# mount192.168.0.13:/opt/nfsroot/users/mgeromin/bora/belk on / type nfs (rw,relatime,vers=2,rsize=4096,wsize=4096,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.13,mountvers=1,mountproto=tcp,local_lock=all,addr=192.168.0.13)devtmpfs on /dev type devtmpfs (rw,relatime,size=507916k,nr_inodes=126979,mode=755)proc on /proc type proc (rw,relatime)sysfs on /sys type sysfs (rw,relatime)debugfs on /sys/kernel/debug type debugfs (rw,relatime)tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)tmpfs on /var/volatile type tmpfs (rw,relatime)devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)/dev/sda1 on /mnt/sda1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)root@bora:~# time cp LibreOffice_4.1.1_Win_x86.msi /mnt/sda1/ real 0m25.114suser 0m0.010ssys 0m4.070sroot@bora:~# umount /mnt/sda1/root@bora:~# mount /dev/sda1 /mnt/sda1/root@bora:~# md5sum LibreOffice_4.1.1_Win_x86.msi /mnt/sda1/LibreOffice_4.1.1_Win_x86.msi4fa047c0590097ce201f49655365d772 LibreOffice_4.1.1_Win_x86.msi4fa047c0590097ce201f49655365d772 /mnt/sda1/LibreOffice_4.1.1_Win_x86.msiroot@bora:~#</pre> [1] This type of cables forces the ID signal of the USB port to be connected to ground, selecting the host mode on SBC Lynx side.===Device mode===The following examples shows how to configure Bora/BoraEVB or BoraX/BoraXEVB to act as a mass storage device. First, a local file named <code>mass</code> is created to emulate a mass storage disk that is populated with a file named <code>file.txt</code>:<pre>root@bora:~# dd if=/dev/zero of=mass count=16 bs=1M16+0 records in16+0 records outroot@bora:~# mkfs.ext3 massmke2fs 1.42.9 (28-Dec-2013)mass is not a block special device.Proceed anyway? (y,n) yFilesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks4096 inodes, 16384 blocks819 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=167772162 block groups8192 blocks per group, 8192 fragments per group2048 inodes per groupSuperblock backups stored on blocks: 8193 Allocating group tables: doneWriting inode tables: doneCreating journal (1024 blocks): doneWriting superblocks and filesystem accounting information: doneroot@bora:~# mkdir looproot@bora:~# mount -o loop mass loop[ 92.316783] kjournald starting. Commit interval 5 seconds[ 92.316901] EXT3-fs (loop0): using internal journal[ 92.316908] EXT3-fs (loop0): mounted filesystem with writeback data moderoot@bora:~# echo dummy > loop/file.txtroot@bora:~# umount loop</pre>Then the proper drivers are loaded on target side:<pre>root@bora:~# modprobe g_mass_storage file=/home/root/mass[ 209.058156] Number of LUNs=8[ 209.061005] Mass Storage Function, version: 2009/09/11[ 209.066085] LUN: removable file: (no medium)[ 209.070349] Number of LUNs=1[ 209.073781] LUN: file: /home/root/mass[ 209.077444] Number of LUNs=1[ 209.080452] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11[ 209.087381] g_mass_storage gadget: userspace failed to provide iSerialNumber[ 209.094393] g_mass_storage gadget: g_mass_storage ready[ 209.099572] zynq-udc: bind to driver g_mass_storage</pre>Last, BoraEVB (or BoraXEVB) is connected to a Linux PC with a USB cable like this one: [[File:USB-cable-micro-host-a.png|thumb|center|400px|USB cable used to connect BoraXEVB to PC]]  On PC side, BoraEVB (or BoraXEVB) is detected as a common USB mass storage device. ==CAN== See [[BoraXEVB#CAN_-_J24 | CAN Pinout]] page and [[Creating_and_building_example_Vivado_project_(BELK/BXELK) | BXELK Vivado project]] for more details. {| class="wikitable"|-! Physical device !! Processor's resource !! Connector !! Type !! Notes|-| CAN BUS || can0 || J24 || differential CAN bus |||-|} The following commands can be issued from command line in order to send and receive CAN frames:<pre>root@bora:~# dmesg | grep -i can[ 0.643798] CAN device driver interface[ 0.997787] can: controller area network core (rev 20120528 abi 9)[ 1.008392] can: raw protocol (rev 20120528)[ 1.012661] can: broadcast manager protocol (rev 20120528 t)[ 1.018294] can: netlink gateway (rev 20130117) max_hops=1root@bora:~# canconfig can0 stopcan0 state: STOPPEDroot@bora:~# canconfig can0 bitrate 500000can0 bitrate: 500000, sample-point: 0.875root@bora:~# canconfig can0 startcan0 state: ERROR-ACTIVEroot@bora:~# cansend can0 -i 0x77 0x33 0x88 0x33 0x88 0x33 0x88 0x33interface = can0, family = 29, type = 3, proto = 1root@bora:~# cansend can0 -i 0x77 0x33 0x88 0x33 0x88 0x33 0x88 0x33interface = can0, family = 29, type = 3, proto = 1root@bora:~# cansend can0 -i 0x77 0x33 0x88 0x33 0x88 0x33 0x88 0x33interface = can0, family = 29, type = 3, proto = 1root@bora:~# candump can0interface = can0, family = 29, type = 3, proto = 1<0x100> [8] 12 34 56 78 9a bc de ff<0x100> [8] 12 34 56 78 9a bc de ff<0x100> [8] 12 34 56 78 9a bc de ff<0x100> [8] 12 34 56 78 9a bc de ff<0x100> [8] 12 34 56 78 9a bc de ff^Croot@bora:~#</pre> ---- In case <code>canutils</code> package is missing, user can install it directly from DAVE's [http://yocto.dave.eu/belk-latest/ BORA package server] using <code>smart update && smart install canutils</code> commands:  <pre>root@bora:~# smart updateUpdating cache... ######################################## [100%] Fetching information for 'all'...-> https://yocto.dave.eu/belk-3.0.1/all/repodata/repomd.xmlrepomd.xml ######################################## [ 50%][snip]Channels have 393 new packages.Saving cache... root@bora:~# smart install canutilsLoading cache...Updating cache... ######################################## [100%] Computing transaction... Installing packages (2): canutils-4.0.6-r0@armv7a_vfp_neon libsocketcan2-0.0.9-r0@armv7a_vfp_neon 27.8kB of package files are needed. 46.8kB will be used. Confirm changes? (Y/n): y [..snip..]</pre> See [[Advanced_use_of_Yocto_build_system_(BELK/BXELK)]] for more information about using Yocto packages and <code>smart</code> ==UART0==UART0 is a spare UART device available on the JP17 PMOD connector. This device is routed through the PL.See [[Creating_and_building_example_Vivado_project_(BELK/BXELK) | BXELK Vivado project]] for more details. {| class="wikitable"|-! Physical device !! Processor's resource !! Connector !! Type !! Linux device file !! Notes|-| UART0 || UART0 || JP17 || 2-wire LVTTL UART || <code>/dev/ttyPS1</code> |||-|} == Temperature sensors ==Bora SOM has a [http://www.ti.com/lit/ds/symlink/tmp422.pdf TMP421AIDCN] temperature sensor onboard. The following commands can be issued from command line in order to get the SOM temperatue:* read the PCB temperature<pre>root@bora:~# cat /sys/devices/soc0/amba/e0004000.i2c/i2c-0/0-004f/hwmon/hwmon1/temp1_input</pre>the returned value has to be divided by 1000 for a °C temperature* read the CPU temperature<pre>root@bora:~# cat /sys/devices/soc0/amba/e0004000.i2c/i2c-0/0-004f/hwmon/hwmon1/temp2_input</pre>the returned value has to be divided by 1000 for a °C temperature Moreover, the SOC has an internal temperature sensor device which can be read using the following shell script:<pre>root@bora:~# cat temp.sh#!/bin/sh # TcpuTEMP_RAW=`cat /sys/devices/soc0/amba/f8007100.adc/iio:device0/in_temp0_raw`TEMP_OFFSET=`cat /sys/devices/soc0/amba/f8007100.adc/iio:device0/in_temp0_offset`TEMP_SCALE=`cat /sys/devices/soc0/amba/f8007100.adc/iio:device0/in_temp0_scale`TEMP=`awk "BEGIN {print (($TEMP_RAW+$TEMP_OFFSET)*$TEMP_SCALE)/1000}"` echo "Cpu Temp: ${TEMP}"
</pre>
8,154
edits

Navigation menu