RPI3

From DaqWiki
Revision as of 12:02, 20 April 2020 by Bvelghe (talk | contribs)
Jump to navigation Jump to search

Raspberry Pi3

Links

  • AAA

On-board hardware

  • AAA

Serial console

there is no useful serial console

Benchmarks

[root@armdaq05 ~]# uname -a
Linux armdaq05.triumf.ca 4.4.21-v7+ #911 SMP Thu Sep 15 14:22:38 BST 2016 armv7l armv7l armv7l GNU/Linux
[root@armdaq05 ~]# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 1
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 2
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 3
model name	: ARMv7 Processor rev 4 (v7l)
BogoMIPS	: 38.40
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

Hardware	: BCM2709
Revision	: a22082
Serial		: 00000000852ec765
[root@armdaq05 ~]# 
[root@armdaq05 ~]# ./memcpy_arm 
memcpy       1 KiBytes:    710 MB/sec
memcpy       2 KiBytes:   1037 MB/sec
memcpy       4 KiBytes:   1340 MB/sec
memcpy       8 KiBytes:   1572 MB/sec
memcpy      16 KiBytes:   1703 MB/sec
memcpy      32 KiBytes:   2010 MB/sec
memcpy      64 KiBytes:   1780 MB/sec
memcpy     128 KiBytes:   1808 MB/sec
memcpy     256 KiBytes:   1421 MB/sec
memcpy     512 KiBytes:    971 MB/sec
memcpy    1024 KiBytes:    862 MB/sec
memcpy    2048 KiBytes:    824 MB/sec
memcpy    4096 KiBytes:    862 MB/sec
memcpy    8192 KiBytes:    817 MB/sec
memcpy   16384 KiBytes:    797 MB/sec
memcpy   32768 KiBytes:    767 MB/sec
memcpy   65536 KiBytes:    765 MB/sec
memcpy  131072 KiBytes:    766 MB/sec
[root@armdaq05 ~]# 

Original boot files with the CentOS 7.1 userland

[root@armdaq05 ~]# blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="70F7-FA1D" TYPE="vfat" 
/dev/mmcblk0p2: LABEL="el7" UUID="0ca625c5-8db1-4f78-a9fd-e6cce04f399e" TYPE="ext4" 
/dev/mmcblk0: PTTYPE="dos" 
[root@armdaq05 ~]# 
[root@armdaq05 ~]# fdisk -l

Disk /dev/mmcblk0: 31.4 GB, 31439454208 bytes, 61405184 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
Disk label type: dos
Disk identifier: 0x5a7089a1

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          137216     2713599     1288192   83  Linux
[root@armdaq05 ~]# 
[root@armdaq05 ~]# df -kl
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        1235136 1029272    125072  90% /
devtmpfs          469536       0    469536   0% /dev
tmpfs             473868       0    473868   0% /dev/shm
tmpfs             473868   29964    443904   7% /run
tmpfs             473868       0    473868   0% /sys/fs/cgroup
tmpfs              94776       0     94776   0% /run/user/0
/dev/mmcblk0p1     64456   21192     43264  33% /mnt/tmp
[root@armdaq05 ~]# 

Install Boot files

Original boot files are in /daq/daqshare/olchansk/RPI3/bootfs

  • use 32GB micro-SD flash
  • connect to USB-to-SD flash adapter, plug into linux computer
  • login as root
  • identify the /dev/sdXXX device corresponding to target media: use "fdisk -l", look for a 32GB disk with a single MS-DOS partition
  • ensure the partitions of /dev/sdXXX are not mounted, use "df -kl" and umount /dev/sdXXX1, etc.
  • run "fdisk /dev/sdXXX"
  • create MSDOS partition table: command "o"
  • create first partition 64Mbytes: command "n", primary "p", first sector "<enter>", last sector: "+64M"
  • set partition type "C": command "t", partition 1 is selected automatically, hex code "c"
  • mark bootable: command "a", partition 1 is selected automatically
  • confirm correct layout: command "p"
Disk /dev/sde: 31.1 GB, 31104958464 bytes, 60751872 sectors
   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *        2048      133119       65536    c  W95 FAT32 (LBA)
  • save new partition table: command "w", there should be no messages other than "syncing disks"
  • mkfs.msdos /dev/sdXXX1
  • mkdir -p /mnt/tmp
  • mount /dev/sdXXX1 /mnt/tmp, cd /mnt/tmp
  • rsync -av /daq/daqshare/olchansk/RPI3/bootfs/ .
  • sync
  • select boot method:
    • cp cmdline-mmcblk.txt cmdline.txt ### to boot from SD flash
    • cp cmdline-nfsroot.txt cmdline.txt ### to boot from network (dhcp and nfsroot)
  • sync
  • cd /; umount /mnt/tmp
  • eject /dev/sdXXX
  • try to boot from the SD flash - on HDMI video, should see Linux kernel boot all the way to a panic on failure to mount rootfs.

Install CentOS7 rootfs image

  • use bootable 32GB micro-SD flash
  • connect and identify /dev/sdXXX same as above
  • ensure all partitions are unmounted, same as above
  • create second partion of maximum size:
  • fdisk /dev/sdXXX
  • command "n", "p", enter, enter
  • command "p" to see the layout:
Disk /dev/sde: 31.1 GB, 31104958464 bytes, 60751872 sectors
   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/sde2          133120    60751871    30309376   83  Linux
  • command "w" to save the changes
  • if it complains about "Device or resource busy":
    • eject /dev/sdXXX
    • remove it from usb adapter
    • connect to usb adapter and identify device again, same as above
  • ls -l /dev/sdXXX* to see there are two partitions "1" and "2"
  • mkfs.ext4 /dev/sdXXX2
  • mkdir -p /mnt/tmp
  • mount /dev/sdXXX2 /mnt/tmp, cd /mnt/tmp
  • rsync -av /ladd/data0/backup.os/armdaq06/ .
  • e2label /dev/sdXXX2 el7
  • sync
  • cd /; umount /mnt/tmp
  • eject /dev/sdXXX
  • try to boot, should boot all the way to the login prompt.

Setup Python i2c tools

su - root
yum install python-setuptools.noarch
yum install python-cffi
yum install python-devel
cd git
git clone https://github.com/bivab/smbus-cffi.git
cd smbus-cffi
python setup.py install

Enable i2c drivers

(already done) edit boot config.txt, uncomment "dtparam=i2c_arm=on" and "dtparam=i2c1=on", reboot
echo modprobe i2c-dev >> /etc/rc.local
echo modprobe i2c_bcm2708 >> /etc/rc.local
ls -l /dev/i2c*
i2cdetect -l
i2cdetect 1
echo chmod a+wr /dev/i2c* >> /etc/rc.local
reboot, run i2cdetect again.

Script for creating boot files

~olchansk/git/scripts/clone/boot_rpi3.perl

Raspbian OS

Recommended RaspberryPi OS is "Raspbian". Current version is:

Raspbian Buster Lite
Version:February 2020
Release date:2020-02-13
Kernel version:4.19
Size:434 MB

Identification and important packages:

root@raspberrypi:~# uname -a
Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux
root@raspberrypi:~# gcc -v
gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1) 
root@raspberrypi:~# python --version
Python 2.7.16
root@raspberrypi:~# python3 --version
Python 3.7.3
root@raspberrypi:~# cmake --version
cmake version 3.13.4
  • download here https://www.raspberrypi.org/downloads/raspbian/
  • unzip, dd to a 32GB SDflash card
  • insert card into RPi3, power up, it will boot into login prompt
  • default user: pi, password: raspbian, login change default password, install ssh keys for user pi and user root.
  • change default keyboard layout from UK (with the pound key): vi /etc/default/keyboard, set XKBLAYOUT="us"
  • change default locale from UK to "C" (en_US.UTF8 does not seem to be available): vi /etc/default/locale, set LANG=C.UTF-8
  • enable ssh server: apt-get install openssh-server, systemctl enable sshd.service, systemctl start sshd.service
  • reboot: shutdown -r now
  • RJ45 ethernet network will autoconfigure by DHCP, ssh pi@... and root@... should work
  • login as root, install missing packages:
    • apt-get update
    • apt-get install git emacs xemacs21 cmake

Create custom images

The official tool used raspberrypi.org is available here: https://github.com/RPi-Distro/pi-gen

It is working out of the box with Debian bullseye. The tool is built around debootstrap, all packages are pulled from http://archive.raspbian.org/ (not the official debian repos!).

The user has to provide a config file named "config" in the root directory. A example is provided below:

IMG_NAME=MVM_GUI_TRIUMF 
RELEASE=buster
DEPLOY_ZIP=0
USE_QEMU=0
LOCALE_DEFAULT=en_CA.UTF-8
TARGET_HOSTNAME=mvm_gui
KEYBOARD_KEYMAP=ca
KEYBOARD_LAYOUT="English (US)"
TIMEZONE_DEFAULT="America/Vancouver"
FIRST_USER_NAME="mvm" 
FIRST_USER_PASS="gui"
ENABLE_SSH=0
STAGE_LIST="stage1 stage2 stage3 stage4"

To build the image, simply run ./build.sh and wait.

GPIO

  • apt-get install wiringpi
  • gpio readall
  • gpio mode 24 output
  • gpio write 24 1
  • gpio write 24 0

SPI

  • if there is no /dev/spidev0.0 and /dev/spidev0.1, edit /boot/config.txt, uncomment dtparam=spi=on, reboot
  • CS pins are:
    • CE0 is J8 pin 24 (GPIO8) is /dev/spidev0,0
    • CE1 is J8 pin 26 (GPIO7) is /dev/spidev0,1

I2C

  • if there is no /dev/i2c*, edit /boot/config.txt, uncomment "dtparam=i2c_arm=on", reboot
  • apt-get install python-smbus i2c-tools
  • i2cdetect -y 1 ### found device at address 0x70:
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --                         

WiFi and Bluetooth

The WiFi and Bluetooth interfaces can be disabled in the boot/config.txt. As a side effect, the PL011 UART is re-routed to the GPIOs 14 and 15. By default, the UART is used by the BT modem.

Note: there is a second "MiniUART" aviabale on the Rpi, but its fonctionally are very limited. See https://www.raspberrypi.org/documentation/configuration/uart.md

# Disables the Bluetooth device (also restores UART0/ttyAMA0 to GPIOs 14 and 15).
dtoverlay=disable-bt
dtoverlay=disable-wifi

End