DE10-Nano: Difference between revisions

From DaqWiki
Jump to navigation Jump to search
 
(94 intermediate revisions by the same user not shown)
Line 4: Line 4:


* http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046&PartNo=4 - DE10-Nano product pages
* http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046&PartNo=4 - DE10-Nano product pages
* https://daqstore.triumf.ca/nextcloud/index.php/s/trpnsXK5xKZdjYG - DE10-Nano documentation (local)
* https://daq00.triumf.ca/nextcloud/index.php/s/trpnsXK5xKZdjYG - DE10-Nano documentation (local)
* https://github.com/altera-opensource/linux-socfpga - Linux kernel sources
* https://github.com/altera-opensource/linux-socfpga - Linux kernel sources
* https://bitlog.it/hardware/building-embedded-linux-for-the-terasic-de10-nano-and-other-cyclone-v-soc-fpgas/
* https://github.com/intel/de10-nano-hardware/tree/master
* https://www.rocketboards.org/foswiki/Documentation/DeviceTreeGenerator140
* https://github.com/altera-opensource/sopc2dts
* https://www.rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide?_ts1669347393245=&erpm_id=6980624_ts1669347393245
* https://github.com/zangman/de10-nano/blob/master/docs/Flash-FPGA-from-HPS-running-Linux.md
= Additional info =
* https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841847/Solution+ZynqMP+PL+Programming
* https://github.com/altera-opensource/linux-socfpga/blob/socfpga-5.4.94-lts/Documentation/ABI/testing/sysfs-class-fpga-manager
= Board revisions =
Per https://daq00.triumf.ca/nextcloud/index.php/s/trpnsXK5xKZdjYG#pdfviewer
* revision A: -A0, EPCQ128
* revision B: -B0, EPCQ128
* revision B2: -B0, "17040025-XXXX”, EPCQ64
* revision C: -C0, EPCQ64


= Serial console =
= Serial console =


xxx
DE10-Nano has a built-in USB-serial adapter connected to the ARM CPU console.
 
Baud rate: 115200 (set in uboot env and in the linux kernel command line)
 
* connect a mini-USB (*not* Micto-USB!) cable from mini-USB port on the side of the ethernet connection to a PC
* "lsusb" will find a usb-serial adapter:
<pre>
$ lsusb
...
Bus 001 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
...
</pre>
* linux will create a ttyUSB device (see system messages if it did not happen)
<pre>
$ ls -l /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 Aug  8 17:12 /dev/ttyUSB0
</pre>
* confirm current user has read and write permissions to /dev/ttyUSB0, "chmod a+wr" the device node as needed, also see http://www.triumf.info/wiki/DAQwiki/index.php/SLinstall#Configure_USB_device_permissions
* use minicom & etc
<pre>
minicom -D /dev/ttyUSB0 -b 115200
</pre>
 
= JTAG =
 
DE10-Nano has a built-in USB blaster.
 
* connect Mini-USB (*not* Micro-USB!) on the side of HDMI and power connectors to a PC
* lsusb will show an altera usb-blaster device:
<pre>
$ lsusb
...
Bus 001 Device 008: ID 09fb:6010 Altera
...
</pre>
* jtagconfig will find a usb-blaster and detect it is connected to a Cyclone5 SoC:
<pre>
$ /daq/daqshare/olchansk/altera/17.1/quartus/bin/jtagconfig
1) DE-SoC [1-1.1]
  4BA00477  SOCVHPS
  02D020DD  5CSEBA6(.|ES)/5CSEMA6/..
</pre>
* open quartus, connect to this usb blaster, work it as usual.
 
== JTAG load sof file ==
 
<pre>
quartus_pgm -m JTAG -o "p;output_files/DE10_NANO_SoC_GHRD.sof@2"
</pre>


= Initial flash card =
= Initial flash card =
Line 614: Line 682:
LD_LIBRARY_PATH=/daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64 /daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64/quartus_pgm -c 1 -m JTAG -o "p;DE10_NANO_SoC_GHRD.sof@2"
LD_LIBRARY_PATH=/daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64 /daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64/quartus_pgm -c 1 -m JTAG -o "p;DE10_NANO_SoC_GHRD.sof@2"
</pre>
</pre>
* if sof file loaded correctly, all LEDs will turn on, one LED will flash.


== HPS_FPGA_LED ==
== HPS_FPGA_LED ==
Line 628: Line 697:
* copy it to the ARM machine: scp HPS_FPGA_LED root@192.168.1.240:
* copy it to the ARM machine: scp HPS_FPGA_LED root@192.168.1.240:
* go to the ARM machine, run it. (ARM machine will freeze, no ping)
* go to the ARM machine, run it. (ARM machine will freeze, no ping)
* if sof file is loaded, the program will run and flash the LEDs
= booting FPGA from EPCS64 =
Per table 3-2, change the SW10 MSEL pins:
Board orientation is:
* power connector on the left, eth connector on the right
* switch position is "up" is "on"; "down" is "off"
<pre>
on-off-on-off-on-on -> default -> configure from HPS
on-on-on-on-on-on -> configure from HPS
on-off-on-on-off-on -> configure from EPCS64
</pre>
= boot Linux from SD flash =
* take a new 32 GB flash card
* create 3 partitions: fpga boot partition (contains u-boot), u-boot partition (contains the linux kernel) and the linux userland partition
<pre>
fdisk -l /dev/sdb
[root@armdaq07 ~]# fdisk -l
Disk /dev/mmcblk0: 31.9 GB, 31914983424 bytes, 62333952 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: 0xddcde1b7
        Device Boot      Start        End      Blocks  Id  System
/dev/mmcblk0p1            2048        4095        1024  a2  Unknown
/dev/mmcblk0p2            4096    1681816      838860+  b  W95 FAT32
/dev/mmcblk0p3        1683456    62333951    30325248  83  Linux
[root@armdaq07 ~]#
</pre>
* copy the images:
<pre>
# ls -l /daq/daqstore/olchansk/daq/DE10-Nano/*.img
-rw-r--r-- 1 olchansk users 1945317376 Jun 26  2017 /daq/daqshare/olchansk/DE10-Nano/de10_nano_linux_console.img
-rw-r--r-- 1 olchansk users    1048576 Aug  8 17:30 /daq/daqshare/olchansk/DE10-Nano/image-1-fpga.img
-rw-r--r-- 1 olchansk users  858992640 Aug  8 17:30 /daq/daqshare/olchansk/DE10-Nano/image-2-uboot.img
# dd if=/daq/daqstore/olchansk/daq/DE10-Nano/image-1-fpga.img of=/dev/sdX1  bs=1024k
# dd if=/daq/daqstore/olchansk/daq/DE10-Nano/image-2-uboot.img of=/dev/sdX2  bs=1024k
</pre>
* move sdflash card from PC to DE10-Nano
* start the serial console (see above)
* cycle the power or reset the DE10-Nano to boot from sd flash
* on the serial console, you will get the u-boot prompt
* run "saveenv"
<pre>
SOCFPGA_CYCLONE5 # saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
SOCFPGA_CYCLONE5 #
</pre>
* change boot partitions:
<pre>
SOCFPGA_CYCLONE5 # setenv mmcloadpart 2
SOCFPGA_CYCLONE5 # setenv mmcroot /dev/mmcblk0p3
SOCFPGA_CYCLONE5 # setenv callscript 'if fatload mmc 0:2 $fpgadata $scriptfile;then source $fpgadata; else echo Optional boot script not found. Continuing to boot normally; fi;'
SOCFPGA_CYCLONE5 # saveenv
</pre>
* set MAC address (the DE10-Nano board has no MAC address chip, so MAC address has to be assigned manually. Use addresses that start with "02:x:x:x:x:x", see "Locally Administered Address Ranges"
<pre>
SOCFPGA_CYCLONE5 # setenv ethaddr 02:aa:bb:cc:dd:ee
SOCFPGA_CYCLONE5 # saveenv
</pre>
* examine result, save and reboot
<pre>
SOCFPGA_CYCLONE5 # printenv           
...
SOCFPGA_CYCLONE5 # saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
SOCFPGA_CYCLONE5 #
SOCFPGA_CYCLONE5 # reset
resetting ...
</pre>
* the linux kernel should boot, fail to find the root filesystem ("VFS: Unable to mount root fs")
* move the SD flash card back to the PC
* create the linux root filesystem
<pre>
mke2fs -t ext4 -O ^huge_file /dev/sdb3
mount /dev/sdb3 /mnt/tmp
#rsync -av /ladd/data0/backup.os/armdaq05/ /mnt/tmp/
rsync -av /daq/daqshare/olchansk/DE10-Nano/image-3-chronobox/ /mnt/tmp/
sync
</pre>
* set the IP address
<pre>
cd /mnt/tmp/etc/sysconfig/network-scripts
emacs -nw ifcfg-eth0
</pre>
to read this: (change IPADDR=x.x.x.x as required)
<pre>
TYPE=Ethernet
BOOTPROTO=none
DNS1=142.90.100.19
DOMAIN=triumf.ca
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
#NAME=static
#UUID=fba7e7fa-0403-4fd6-965e-778e7af0dd99
ONBOOT=yes
#IPADDR=142.90.111.143
IPADDR=142.90.121.107
PREFIX=19
GATEWAY=142.90.100.18
</pre>
* eject SD flash card, move it to the DE10-Nano
<pre>
cd /
umount /dev/sdb3
eject /dev/sdb
</pre>
* try to boot
= boot Linux from network =
uboot version: U-Boot 2013.01.01
* fw_printenv
* remember old bootcmd: bootcmd=run callscript; run mmcload; run mmcboot
* remember old bootargs: bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait
* fw_setenv bootcmd 'run bridge_enable_handoff; run netboot'
* fw_setenv ramboot bootz \${loadaddr} - \${fdtaddr}
* remember to set the MAC address, there is no MAC eeprom!
* fw_setenv ethaddr 02:aa:bb:cc:dd:01 ### see chronobox page about chronobox MAC assignements
* fw_setenv bootargs console=ttyS0,115200 ip=dhcp root=/dev/nfs rw nfsroot=192.168.1.1:/zssd/nfsroot/%s,vers=3 panic=15
an even older old bootargs:
* setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p3 rw rootwait panic=15
update april 2022
<pre>
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^ethaddr
ethaddr=02:aa:bb:cc:cb:03
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^bootcmd
bootcmd=run bridge_enable_handoff; run netboot
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^netboot
netboot=dhcp ${bootimage} ; tftp ${fdtaddr} ${fdtimage} ; run ramboot
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^ramboot
ramboot=bootz ${loadaddr} - ${fdtaddr}
</pre>
= u-boot environment access from linux =
* on chronobox cb02 Raspbian-10
* apt install cmake libyaml-dev
* mkdir ~/git; cd ~/git
* git clone https://github.com/sbabic/libubootenv
* cd libubootenv
* mkdir build; cd build; cmake ..; make; ls -l ./src/fw_printenv
use fw_printenv from above
* yum install uboot-tools
* apt install u-boot-tools ### does not work, see https://bugs.centos.org/view.php?id=14151
* comment out everything in /etc/fw_env.config, add this line:
<pre>
/dev/mmcblk0 0x200 0x1000
</pre>
* fw_printenv should work (it should NOT print "Warning: Bad CRC, using default environment" as the very first line)
Example: set MAC address from Linux:
<pre>
fw_setenv ethaddr 02:aa:bb:cc:dd:01
fw_printenv | grep ethaddr=
ethaddr=02:aa:bb:cc:dd:01
</pre>
= Install busybox =
For reasons unclear the "devmem" command (part of busybox) is missing from the centos7 userland image.
To install it, do this:
<pre>
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-armv7r
file busybox-armv7r
chmod a+x ./busybox-armv7r
./busybox-armv7r
./busybox-armv7r devmem
</pre>
= FPGA bridge access magic =
special magic may be needed to enabled /dev/mem access to the FPGA bridge,
per https://lists.rocketboards.org/pipermail/rfi/2015-August/003259.html
<pre>
HI,
By default the bridges will only allow privileged accesses in Arria 10.  At
this time i am not aware of any way to adjust this from linux space, but it
is entirely configurable from a uboot prompt.
In:    serial
Out:  serial
Err:  serial
Model: SOCFPGA Arria10 Dev Kit
Net:  dwmac.ff800000
Hit any key to stop autoboot:  0
SOCFPGA_ARRIA10 #
SOCFPGA_ARRIA10 #
SOCFPGA_ARRIA10 # mw.l 0xFFD13500 0x1
SOCFPGA_ARRIA10 # mw.l 0xFFD13504 0x1
SOCFPGA_ARRIA10 # mw.l 0xFFD11004 0xffffffff
SOCFPGA_ARRIA10 # md.l 0xFFD0502C 1
ffd0502c: 0000003f                              ?...
SOCFPGA_ARRIA10 # mw.l 0xFFD0502C 0x3C
SOCFPGA_ARRIA10 # md.l 0xFFD0502C 1
ffd0502c: 0000003c                              <...
SOCFPGA_ARRIA10 # md.l 0xc0000000 10
c0000000: 00000000 00000000 00000000 00000000    ................
c0000010: 00000000 00000000 00000000 00000000    ................
c0000020: 00000000 00000000 00000000 00000000    ................
c0000030: 00000000 00000000 00000000 00000000    ................
SOCFPGA_ARRIA10 #
the above could easily be added to a uboot script and run automatically at
boot.
In linux, you can then
root at arria10:~# devmem --help
BusyBox v1.22.1 (2015-05-31 18:07:25 UTC) multi-call binary.
Usage: devmem ADDRESS [WIDTH [VALUE]]
Read/write from physical address
        ADDRESS Address to act upon
        WIDTH  Width (8/16/...)
        VALUE  Data to be written
root at arria10:~# devmem 0xc0000000 32 0xdeadbeef
root at arria10:~# devmem 0xc0000000 32
0xDEADBEEF
root at arria10:~#
to test unprivileged accesses.
--dalon
</pre>
= Load FPGA from Linux =
== THIS DOES NOT WORK ==
from here: https://forum.rocketboards.org/t/load-fpga-rbf-from-device-tree-overlay-example/999/16
<pre>
Finally, I found a working solution:
load_rbf.dts:
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target-path = "/soc/base-fpga-region";
#address-cells = <1>;
#size-cells = <1>;
overlay {
firmware-name = "de10_soc.rbf";
#address-cells = <1>;
#size-cells = <1>;
};
};
};
dtc -O dtb -o load_rbf.dtbo -b 0 -@ load_rbf.dts
Copy load_rbf.dtbo and de10_soc.rbf to /lib/firmware
mount -t configfs configfs /config
rmdir /config/device-tree/overlays/test
mkdir /config/device-tree/overlays/test
echo load_rbf.dtbo > /config/device-tree/overlays/test/path
The magic command is:
devmem 0xff800000 32 0x00000019
I really don’t know what this does. However, by looking at how the bridge is enabled in u-boot:
#bridge_enable_handoff=mw $fpgaintf ${fpgaintf_handoff}; go $fpga2sdram_apply; mw $fpga2sdram ${fpga2sdram_handoff}; mw $axibridge ${axibridge_handoff}; mw $l3remap ${l3remap_handoff}
#mw $fpgaintf ${fpgaintf_handoff};
#fpgaintf=ffd08028
#fpgaintf_handoff=0x00000000
->devmem 0xffd08028 32 0x00000000
#go $fpga2sdram_apply;
->??
#mw $fpga2sdram ${fpga2sdram_handoff};
#fpga2sdram=ffc25080
#fpga2sdram_handoff=0x00000000
->devmem 0xffc25080 32 0x00000000
#mw $axibridge ${axibridge_handoff};
#axibridge=ffd0501c
#axibridge_handoff=0x00000000
->devmem 0xffd0501c 32 0x00000000
#mw $l3remap ${l3remap_handoff}
#l3remap=ff800000
#l3remap_handoff=0x00000019
->devmem 0xff800000 32 0x00000019
I found that this register needs to be written to 0x19 and then there is no bus error any more.
How to load RBF file from Linux kernel 4.1 on DE10-Nano SoC
2
</pre>
THE ABOVE DOES NOT WORK: echo load_rbf.dtbo > /config/device-tree/overlays/test/path BOMBS.
from here: https://forum.rocketboards.org/t/rbf-with-overlay/1800
<pre>
Hi, this issue is resolved by adding following change in
arch/arm/boot/dts/socfpga.dtsi
base_fpga_region: base-fpga-region {
compatible = “fpga-region”;
fpga-mgr = <&fpgamgr0>;
fpga-bridges = <&fpga_bridge0>;
                    #address-cells = <0x1>;
                    #size-cells = <0x1>;
            };
modifying
</pre>
== UPDATED 9feb2024 ==
* https://github.com/zangman/de10-nano/blob/master/docs/Flash-FPGA-from-HPS-running-Linux.md
* blink.dtso
<pre>
/dts-v1/;
/plugin/;
/{
        fragment@0 {
        target-path = "/soc/base-fpga-region";
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <1>;
            firmware-name = "blink.rbf";
        };
    };
};
</pre>
* dtc -O dtb -o blink.dtbo -b 0 -@ blink.dtso
* cp blink.dtbo /lib/firmware
* cp blink.rbf /lib/firmware
* mkdir -p /config
* mount -t configfs configfs /config
* rmdir /config/device-tree/overlays/blink
* mkdir /config/device-tree/overlays/blink
* echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
* BOMBS: dmesg: overlay: find target, node: /fragment@0, path '/soc/base-fpga-region' not found
* sure enough, there is no /soc/base-fpga-region ni the device tree at /sys/firmware/devicetree
* I think I have a bum socfpga.dtb file that was generated by ??? for which kernel, etc...
* use de0 dtb file:
* cp /home/olchansk/daq/linux/linux-socfpga/arch/arm/boot/dts/socfpga_cyclone5_de0_nano_soc.dtb /tftpboot/socfpga.dtb
* reboot ok
* observe /dev/i2c-1 is gone, only /dev/i2c-0 is there.
* observe /sys/firmware/devicetree/base/soc/base-fpga-region is there, name matches what's in blink.dtso
* mkdir /config/device-tree/overlays/blink
* echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
* BOMBS: because we did not supply a valid rbf file (and did not set the boot mode switches)
<pre>
[  161.764436] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  161.765026] fpga_manager fpga0: loading /lib/firmware/blink.rbf failed with error -22
[  161.765046] fpga_manager fpga0: Direct firmware load for blink.rbf failed with error -22
[  161.765063] fpga_manager fpga0: Error requesting firmware blink.rbf
[  161.765072] fpga_region region0: failed to load FPGA image
[  161.765085] OF: overlay: overlay changeset pre-apply notifier error -22, target: /soc/base-fpga-region
[  161.765110] create_overlay: Failed to create overlay (err=-22)
</pre>
* copy correct RBF file to /lib/firmware/blink.rbf
* rmdir /config/device-tree/overlays/blink
* mkdir /config/device-tree/overlays/blink
* echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
* BOMBS: we did not set the MSEL jumpers!
<pre>
[  958.339222] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  958.695612] fpga_manager fpga0: Error after writing image data to FPGA
[  958.696835] fpga_region region0: failed to load FPGA image
[  958.696853] OF: overlay: overlay changeset pre-apply notifier error -110, target: /soc/base-fpga-region
[  958.696888] create_overlay: Failed to create overlay (err=-110)
</pre>
* set MSEL to "all on", power up, boot ok
* echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
* light blink, then it goes into a reset cycle...
* sure enough bad power supply, no 5VDC, see 4.2..3.5V, find a proper DE10 power supply, boot okey, try again!
* success
<pre>
[  108.122978] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  108.735916] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/base-fpga-region/firmware-name
</pre>
== add missing i2c-1 ==
copy snippet from here:
https://github.com/intel/de10-nano-hardware/blob/master/devicetrees/de10-nano-base.dtsi
i2c1.dtso
<pre>
/plugin/;
/{
    fragment@0 {
        target-path = "/soc/i2c@ffc05000";
        __overlay__ {
            status = "okay";
            clock-frequency = <100000>;
            i2c-sda-hold-time-ns = <500>;
        };
    };
};
</pre>
<pre>
emacs -nw i2c1.dtso
dtc -O dtb -o i2c1.dtbo -b 0 -@ i2c1.dtso
cp i2c1.dtbo /lib/firmware/
mkdir /config/device-tree/overlays/i2c1
echo -n "i2c1.dtbo" > /config/device-tree/overlays/i2c1/path
[  836.451323] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/i2c@ffc05000/status
root@dltdc:~# ls -l /dev/i2c*
crw-rw-rw- 1 root i2c 89, 0 Feb  9 21:51 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Feb  9 22:15 /dev/i2c-1
root@dltdc:~# i2cdetect -y -r 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                        -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                       
root@dltdc:~#
</pre>
after setting correct i2c hold time, connected to DLDB board:
<pre>
root@dltdc:~# i2cdetect -y -r 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                        -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- 47 48 49 4a 4b -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                       
root@dltdc:~#
</pre>
after running dldb script, 0x21 and 0x26 also show up:
<pre>
root@dltdc:~# i2cdetect -y -r 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                        -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- 21 -- -- -- -- 26 -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- 47 48 49 4a 4b -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                       
root@dltdc:~#
</pre>
= Build Linux kernel =
* git clone https://github.com/altera-opensource/linux-socfpga.git
* git clone https://github.com/altera-opensource/u-boot-socfpga.git
* cd linux-socfpga
* git checkout socfpga-6.1.55-lts
* export ARCH=arm
* make socfpga_defconfig
* make menuconfig # configure the kernel, ha, ha, ha!
* make ### bombs, need to know how to cross-compile!
* Ubuntu 22.04
* apt install gcc-arm-linux-gnueabihf
* export CROSS_COMPILE=arm-linux-gnueabihf-
* make -j
* ls -l arch/arm/boot/zImage
-rwxr-xr-x 1 olchansk users 5112608 Feb  3 18:31 arch/arm/boot/zImage
* try to boot it?
* https://rocketboards.org/foswiki/Documentation/BuildingBootloader
= new boot messages =
== 2024 feb 26 ==
<pre>
resetting ...
U-Boot SPL 2013.01.01 (Mar 06 2019 - 19:53:19)
BOARD : Altera SOCFPGA Cyclone V Board
CLOCK: EOSC1 clock 25000 KHz
CLOCK: EOSC2 clock 25000 KHz
CLOCK: F2S_SDR_REF clock 0 KHz
CLOCK: F2S_PER_REF clock 0 KHz
CLOCK: MPU clock 800 MHz
CLOCK: DDR clock 400 MHz
CLOCK: UART clock 100000 KHz
CLOCK: MMC clock 50000 KHz
CLOCK: QSPI clock 3125 KHz
RESET: WARM
INFO : Watchdog enabled
SDRAM: Initializing MMR registers
SDRAM: Calibrating PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
SDRAM: 1024 MiB
ALTERA DWMMC: 0
U-Boot 2013.01.01-g0c9a3bd-dirty (Feb 28 2019 - 16:03:30)
CPU  : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone V Board
I2C:  ready
DRAM:  1 GiB
MMC:  ALTERA DWMMC: 0
In:    serial
Out:  serial
Err:  serial
Net:  mii0
Hit any key to stop autoboot:  0
## Starting application at 0x3FF785A8 ...
## Application terminated, rc = 0x0
Waiting for PHY auto negotiation to complete... done
ENET Speed is 1000 Mbps - FULL duplex connection
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.0.2
Using mii0 device
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'zImage'.
Load address: 0x8000
Loading: #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        ####################
        3.5 MiB/s
done
Bytes transferred = 5056104 (4d2668 hex)
Using mii0 device
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'socfpga.dtb'.
Load address: 0x100
Loading: ##
        3.2 MiB/s
done
Bytes transferred = 26458 (675a hex)
## Flattened Device Tree blob at 00000100
  Booting using the fdt blob at 0x00000100
  reserving fdt memory region: addr=0 size=1000
  Loading Device Tree to 03ff6000, end 03fff759 ... OK
Starting kernel ...
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 6.1.55-246590-g57cf7f3b7f73 (olchansk@daq00.triumf.ca) (arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~224
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Terasic DE-0(Atlas)
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] Zone ranges:
[    0.000000]  Normal  [mem 0x0000000000000000-0x000000002fffffff]
[    0.000000]  HighMem  [mem 0x0000000030000000-0x000000003fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]  node  0: [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] percpu: Embedded 15 pages/cpu s30228 r8192 d23020 u61440
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 260608
[    0.000000] Kernel command line: console=ttyS0,115200 ip=dhcp root=/dev/nfs rw nfsroot=192.168.0.1:/nfsroot/%s,vers=3 panic=15
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 1027064K/1048576K available (8192K kernel code, 850K rwdata, 1756K rodata, 1024K init, 154K bss, 21512K reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] ftrace: allocating 26007 entries in 77 pages
[    0.000000] ftrace: allocated 77 pages with 4 groups
[    0.000000] trace event string verifier disabled
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:    RCU event tracing is enabled.
[    0.000000]  Rude variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] L2C: DT/platform modifies aux control register: 0x02060000 -> 0x32460000
[    0.000000] L2C-310 erratum 769419 enabled
[    0.000000] L2C-310 enabling early BRESP for Cortex-A9
[    0.000000] L2C-310 full line of zeros enabled for Cortex-A9
[    0.000000] L2C-310 ID prefetch enabled, offset 8 lines
[    0.000000] L2C-310 dynamic clock gating enabled, standby mode enabled
[    0.000000] L2C-310 cache controller enabled, 8 ways, 512 kB
[    0.000000] L2C-310: CACHE_ID 0x410030c9, AUX_CTRL 0x76460001
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
[    0.000001] sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
[    0.000016] Switching to timer-based delay loop, resolution 10ns
[    0.000388] Console: colour dummy device 80x30
[    0.000433] Calibrating delay loop (skipped), value calculated using timer frequency.. 200.00 BogoMIPS (lpj=1000000)
[    0.000447] CPU: Testing write buffer coherency: ok
[    0.000486] Spectre V2: workarounds disabled by configuration
[    0.000491] pid_max: default: 32768 minimum: 301
[    0.000671] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.000692] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.001573] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.002598] cblist_init_generic: Setting adjustable number of callback queues.
[    0.002607] cblist_init_generic: Setting shift to 1 and lim to 1.
[    0.002758] Setting up static identity map for 0x100000 - 0x100060
[    0.002931] rcu: Hierarchical SRCU implementation.
[    0.002938] rcu:    Max phase no-delay instances is 1000.
[    0.003657] smp: Bringing up secondary CPUs ...
[    0.004484] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.004611] smp: Brought up 1 node, 2 CPUs
[    0.004623] SMP: Total of 2 processors activated (400.00 BogoMIPS).
[    0.004632] CPU: All CPU(s) started in SVC mode.
[    0.005260] devtmpfs: initialized
[    0.009770] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.010033] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.010053] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
[    0.010281]
[    0.010286] *************************************************************
[    0.010290] **    NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **
[    0.010294] **                                                        **
[    0.010297] **  IOMMU DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL  **
[    0.010300] **                                                        **
[    0.010303] ** This means that this kernel is built to expose internal **
[    0.010306] ** IOMMU data structures, which may compromise security on **
[    0.010309] ** your system.                                            **
[    0.010312] **                                                        **
[    0.010315] ** If you see this message and you are not debugging the  **
[    0.010318] ** kernel, report this immediately to your vendor!        **
[    0.010321] **                                                        **
[    0.010323] **    NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **
[    0.010326] *************************************************************
[    0.010915] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.012196] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.013095] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.013107] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.035354] iommu: Default domain type: Translated
[    0.035365] iommu: DMA domain TLB invalidation policy: strict mode
[    0.035789] FPGA manager framework
[    1.191732] clocksource: Switched to clocksource timer1
[    1.202145] NET: Registered PF_INET protocol family
[    1.202415] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    1.204370] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    1.204415] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    1.204431] TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    1.204510] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)
[    1.204749] TCP: Hash tables configured (established 8192 bind 8192)
[    1.204913] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
[    1.204964] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
[    1.205205] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    1.206139] RPC: Registered named UNIX socket transport module.
[    1.206154] RPC: Registered udp transport module.
[    1.206159] RPC: Registered tcp transport module.
[    1.206163] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.218948] hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
[    1.220332] workingset: timestamp_bits=30 max_order=18 bucket_order=0
[    1.225256] DLM installed
[    1.226923] NFS: Registering the id_resolver key type
[    1.226962] Key type id_resolver registered
[    1.226969] Key type id_legacy registered
[    1.227061] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    1.227070] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    1.227640] bounce: pool size: 64 pages
[    1.227733] io scheduler mq-deadline registered
[    1.227742] io scheduler kyber registered
[    1.232392] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    1.233407] printk: console [ttyS0] disabled
[    1.233436] ffc02000.serial0: ttyS0 at MMIO 0xffc02000 (irq = 30, base_baud = 6250000) is a 16550A
[    1.943525] printk: console [ttyS0] enabled
[    1.948402] ffc03000.serial1: ttyS1 at MMIO 0xffc03000 (irq = 31, base_baud = 6250000) is a 16550A
[    1.959088] socfpga-dwmac ff702000.ethernet: error -ENXIO: IRQ macirq_rx0 not found
[    1.966755] socfpga-dwmac ff702000.ethernet: error -ENXIO: IRQ macirq_tx0 not found
[    1.974410] socfpga-dwmac ff702000.ethernet: IRQ eth_wake_irq not found
[    1.981003] socfpga-dwmac ff702000.ethernet: IRQ eth_lpi not found
[    1.987287] socfpga-dwmac ff702000.ethernet: PTP uses main clock
[    1.993520] socfpga-dwmac ff702000.ethernet: Version ID not available
[    1.999948] socfpga-dwmac ff702000.ethernet:        DWMAC1000
[    2.005182] socfpga-dwmac ff702000.ethernet: DMA HW capability register supported
[    2.012657] socfpga-dwmac ff702000.ethernet: RX Checksum Offload Engine supported
[    2.020111] socfpga-dwmac ff702000.ethernet: COE Type 2
[    2.025327] socfpga-dwmac ff702000.ethernet: TX Checksum insertion supported
[    2.032365] socfpga-dwmac ff702000.ethernet: Enhanced/Alternate descriptors
[    2.039301] socfpga-dwmac ff702000.ethernet: Extended descriptors not supported
[    2.046589] socfpga-dwmac ff702000.ethernet: Ring mode enabled
[    2.052408] socfpga-dwmac ff702000.ethernet: TX COE limited to 0 tx queues
[    2.068051] Micrel KSZ9031 Gigabit PHY stmmac-0:01: attached PHY driver (mii_bus:phy_addr=stmmac-0:01, irq=POLL)
[    2.079723] i2c_dev: i2c /dev entries driver
[    2.084211] Synopsys Designware Multimedia Card Interface Driver
[    2.091185] fpga_manager fpga0: Altera SOCFPGA FPGA Manager registered
[    2.098288] NET: Registered PF_PACKET protocol family
[    2.103359] NET: Registered PF_KEY protocol family
[    2.108246] sctp: Hash tables configured (bind 512/512)
[    2.113697] Key type dns_resolver registered
[    2.118024] ThumbEE CPU extension supported.
[    2.122313] Registering SWP/SWPB emulation handler
[    2.132510] of-fpga-region soc:base-fpga-region: FPGA Region probed
[    2.138956] of_cfs_init
[    2.141429] of_cfs_init: OK
[    2.144978] socfpga-dwmac ff702000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[    2.239826] socfpga-dwmac ff702000.ethernet eth0: PHY [stmmac-0:01] driver [Micrel KSZ9031 Gigabit PHY] (irq=POLL)
[    2.260183] dwmac1000: Master AXI performs any burst length
[    2.265757] socfpga-dwmac ff702000.ethernet eth0: No Safety Features support found
[    2.283960] socfpga-dwmac ff702000.ethernet eth0: configuring for phy/rgmii link mode
[    5.433280] socfpga-dwmac ff702000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[    5.471699] Sending DHCP requests ., OK
[    5.535557] IP-Config: Got DHCP answer from 192.168.0.1, my address is 192.168.0.2
[    5.543120] IP-Config: Complete:
[    5.546336]      device=eth0, hwaddr=02:aa:bb:cc:dd:aa, ipaddr=192.168.0.2, mask=255.255.255.0, gw=192.168.0.1
[    5.556313]      host=dltdc, domain=, nis-domain=(none)
[    5.561520]      bootserver=192.168.0.1, rootserver=192.168.0.1, rootpath=/nfsroot/%s,vers=3,tcp
[    5.561529]      nameserver0=192.168.0.1
[    5.574646] dw-apb-uart ffc02000.serial0: forbid DMA for kernel console
[    5.612231] VFS: Mounted root (nfs filesystem) on device 0:15.
[    5.618429] devtmpfs: mounted
[    5.624790] Freeing unused kernel image (initmem) memory: 1024K
[    5.651982] Run /sbin/init as init process
[    6.017202] systemd[1]: System time before build time, advancing clock.
[    6.065983] systemd[1]: systemd 252.17-1~deb12u1+rpi1 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +G)
[    6.099280] systemd[1]: Detected architecture arm.
Welcome to Raspbian GNU/Linux 12 (bookworm)!
[    7.552976] systemd[1]: Queued start job for default target graphical.target.
[    7.566651] systemd[1]: Created slice system-getty.slice - Slice /system/getty.
[  OK  ] Created slice system-getty.slice - Slice /system/getty.
[    7.613726] systemd[1]: Created slice system-modprobe.slice - Slice /system/modprobe.
[  OK  ] Created slice system-modpr…lice - Slice /system/modprobe.
[    7.663722] systemd[1]: Created slice system-serial\x2dgetty.slice - Slice /system/serial-getty.
[  OK  ] Created slice system-seria… - Slice /system/serial-getty.
[    7.712896] systemd[1]: Created slice user.slice - User and Session Slice.
[  OK  ] Created slice user.slice - User and Session Slice.
[    7.742346] systemd[1]: Started systemd-ask-password-console.path - Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started systemd-ask-passwo…quests to Console Directory Watch.
[    7.782280] systemd[1]: Started systemd-ask-password-wall.path - Forward Password Requests to Wall Directory Watch.
[  OK  ] Started systemd-ask-passwo… Requests to Wall Directory Watch.
[    7.832956] systemd[1]: Set up automount proc-sys-fs-binfmt_misc.automount - Arbitrary Executable File Formats File System Automount.
[  OK  ] Set up automount proc-sys-…rmats File System Automount Point.
[    7.872213] systemd[1]: Reached target cryptsetup.target - Local Encrypted Volumes.
[  OK  ] Reached target cryptsetup.…get - Local Encrypted Volumes.
[    7.902149] systemd[1]: Reached target integritysetup.target - Local Integrity Protected Volumes.
[  OK  ] Reached target integrityse…Local Integrity Protected Volumes.
[    7.932298] systemd[1]: Reached target paths.target - Path Units.
[  OK  ] Reached target paths.target - Path Units.
[    7.972257] systemd[1]: Reached target slices.target - Slice Units.
[  OK  ] Reached target slices.target - Slice Units.
[    8.002188] systemd[1]: Reached target swap.target - Swaps.
[  OK  ] Reached target swap.target - Swaps.
[    8.032131] systemd[1]: Reached target veritysetup.target - Local Verity Protected Volumes.
[  OK  ] Reached target veritysetup… - Local Verity Protected Volumes.
[    8.073573] systemd[1]: Listening on syslog.socket - Syslog Socket.
[  OK  ] Listening on syslog.socket - Syslog Socket.
[    8.112499] systemd[1]: Listening on systemd-initctl.socket - initctl Compatibility Named Pipe.
[  OK  ] Listening on systemd-initc… initctl Compatibility Named Pipe.
[    8.169649] systemd[1]: systemd-journald-audit.socket - Journal Audit Socket was skipped because of an unmet condition check (Condit.
[    8.184670] systemd[1]: Listening on systemd-journald-dev-log.socket - Journal Socket (/dev/log).
[  OK  ] Listening on systemd-journ…t - Journal Socket (/dev/log).
[    8.222929] systemd[1]: Listening on systemd-journald.socket - Journal Socket.
[  OK  ] Listening on systemd-journald.socket - Journal Socket.
[    8.254492] systemd[1]: Listening on systemd-udevd-control.socket - udev Control Socket.
[  OK  ] Listening on systemd-udevd….socket - udev Control Socket.
[    8.302768] systemd[1]: Listening on systemd-udevd-kernel.socket - udev Kernel Socket.
[  OK  ] Listening on systemd-udevd…l.socket - udev Kernel Socket.
[    8.342659] systemd[1]: dev-hugepages.mount - Huge Pages File System was skipped because of an unmet condition check (ConditionPathE.
[    8.402235] systemd[1]: Mounting dev-mqueue.mount - POSIX Message Queue File System...
        Mounting dev-mqueue.mount��POSIX Message Queue File System...
[    8.438176] systemd[1]: Mounting sys-kernel-debug.mount - Kernel Debug File System...
        Mounting sys-kernel-debug.… - Kernel Debug File System...
[    8.475957] systemd[1]: Mounting sys-kernel-tracing.mount - Kernel Trace File System...
        Mounting sys-kernel-tracin… - Kernel Trace File System...
[    8.522462] systemd[1]: auth-rpcgss-module.service - Kernel Module supporting RPCSEC_GSS was skipped because of an unmet condition c.
[    8.545330] systemd[1]: Starting fake-hwclock.service - Restore / save the current clock...
        Starting fake-hwclock.serv…estore / save the current clock...
[    8.587796] systemd[1]: Starting keyboard-setup.service - Set the console keyboard layout...
        Starting keyboard-setup.se…Set the console keyboard layout...
[    8.622164] systemd[1]: kmod-static-nodes.service - Create List of Static Device Nodes was skipped because of an unmet condition che.
[    8.682591] systemd[1]: Starting modprobe@configfs.service - Load Kernel Module configfs...
        Starting modprobe@configfs…m - Load Kernel Module configfs...
[    8.718106] systemd[1]: Starting modprobe@dm_mod.service - Load Kernel Module dm_mod...
        Starting modprobe@dm_mod.s…[0m - Load Kernel Module dm_mod...
[    8.767301] systemd[1]: Starting modprobe@drm.service - Load Kernel Module drm...
        Starting modprobe@drm.service - Load Kernel Module drm...
[    8.807471] systemd[1]: Starting modprobe@efi_pstore.service - Load Kernel Module efi_pstore...
        Starting modprobe@efi_psto…- Load Kernel Module efi_pstore...
[    8.847142] systemd[1]: Starting modprobe@fuse.service - Load Kernel Module fuse...
        Starting modprobe@fuse.ser…e - Load Kernel Module fuse...
[    8.887359] systemd[1]: Starting modprobe@loop.service - Load Kernel Module loop...
        Starting modprobe@loop.ser…e - Load Kernel Module loop...
[    8.934417] systemd[1]: systemd-journald.service: unit configures an IP firewall, but the local system does not support BPF/cgroup f.
[    8.947421] systemd[1]: (This warning is only shown for the first unit using IP firewalling.)
[    8.992616] systemd[1]: Starting systemd-journald.service - Journal Service...
        Starting systemd-journald.service - Journal Service...
[    9.031231] systemd[1]: Starting systemd-modules-load.service - Load Kernel Modules...
        Starting systemd-modules-l…rvice - Load Kernel Modules...
[    9.086842] systemd[1]: Starting systemd-remount-fs.service - Remount Root and Kernel File Systems...
        Starting systemd-remount-f…nt Root and Kernel File Systems...
[    9.146808] systemd[1]: Starting systemd-udev-trigger.service - Coldplug All udev Devices...
        Starting systemd-udev-trig…[0m - Coldplug All udev Devices...
[    9.201902] systemd[1]: Mounted dev-mqueue.mount - POSIX Message Queue File System.
[  OK  ] Mounted dev-mqueue.mount- POSIX Message Queue File System.
[    9.244473] systemd[1]: Mounted sys-kernel-debug.mount - Kernel Debug File System.
[  OK  ] Mounted sys-kernel-debug.m…nt - Kernel Debug File System.
[    9.283469] systemd[1]: Mounted sys-kernel-tracing.mount - Kernel Trace File System.
[  OK  ] Mounted sys-kernel-tracing…nt - Kernel Trace File System.
[    9.323240] systemd[1]: Finished fake-hwclock.service - Restore / save the current clock.
[  OK  ] Finished fake-hwclock.serv… Restore / save the current clock.
[    9.396923] systemd[1]: Started systemd-journald.service - Journal Service.
[  OK  ] Started systemd-journald.service - Journal Service.
[  OK  ] Finished keyboard-setup.se…- Set the console keyboard layout.
[  OK  ] Finished modprobe@configfs…[0m - Load Kernel Module configfs.
[  OK  ] Finished modprobe@dm_mod.s…e - Load Kernel Module dm_mod.
[  OK  ] Finished modprobe@drm.service - Load Kernel Module drm.
[  OK  ] Finished modprobe@efi_psto…m - Load Kernel Module efi_pstore.
[  OK  ] Finished modprobe@fuse.service - Load Kernel Module fuse.
[  OK  ] Finished modprobe@loop.service - Load Kernel Module loop.
[  OK  ] Finished systemd-modules-l…service - Load Kernel Modules.
[  OK  ] Finished systemd-remount-f…ount Root and Kernel File Systems.
[  OK  ] Finished systemd-udev-trig…e - Coldplug All udev Devices.
        Mounting sys-kernel-config…ernel Configuration File System...
        Starting ifupdown-pre.serv…ynchronize boot up for ifupdown...
        Starting systemd-journal-f…h Journal to Persistent Storage...
        Starting systemd-random-se…ice - Load/Save Random Seed...
[    9.925670] systemd-journald[92]: Received client request to flush runtime journal.
[    9.948264] systemd-journald[92]: File /var/log/journal/ffb6cc161fe042069f9d95266bfc1324/system.journal corrupted or uncleanly shut .
        Starting systemd-sysctl.se…ce - Apply Kernel Variables...
        Starting systemd-sysusers.…rvice - Create System Users...
[  OK  ] Mounted sys-kernel-config.… Kernel Configuration File System.
[  OK  ] Finished ifupdown-pre.serv… synchronize boot up for ifupdown.
[  OK  ] Finished systemd-sysctl.service - Apply Kernel Variables.
[  OK  ] Finished systemd-sysusers.service - Create System Users.
        Starting systemd-tmpfiles-…ate Static Device Nodes in /dev...
[  OK  ] Finished systemd-journal-f…ush Journal to Persistent Storage.
[  OK  ] Finished systemd-tmpfiles-…reate Static Device Nodes in /dev.
[  OK  ] Reached target local-fs-pr…reparation for Local File Systems.
[  OK  ] Reached target local-fs.target - Local File Systems.
        Starting console-setup.ser…m - Set console font and keymap...
        Starting networking.service - Raise network interfaces...
        Starting systemd-binfmt.se…et Up Additional Binary Formats...
        Starting systemd-tmpfiles-… Volatile Files and Directories...
        Starting systemd-udevd.ser…ger for Device Events and Files...
[  OK  ] Finished console-setup.ser…[0m - Set console font and keymap.
        Mounting proc-sys-fs-binfm…utable File Formats File System...
[  OK  ] Mounted proc-sys-fs-binfmt…ecutable File Formats File System.
[  OK  ] Finished systemd-random-se…rvice - Load/Save Random Seed.
[  OK  ] Finished systemd-binfmt.se… Set Up Additional Binary Formats.
[  OK  ] Started systemd-udevd.serv…nager for Device Events and Files.
[  OK  ] Finished systemd-tmpfiles-…te Volatile Files and Directories.
        Mounting run-rpc_pipefs.mount - RPC Pipe File System...
[  OK  ] Started haveged.servicemon based on the HAVEGE algorithm.
        Starting systemd-timesyncd… - Network Time Synchronization...
        Starting systemd-update-ut…rd System Boot/Shutdown in UTMP...
[  OK  ] Mounted run-rpc_pipefs.mount - RPC Pipe File System.
[  OK  ] Found device dev-ttyS0.device - /dev/ttyS0.
[  OK  ] Finished systemd-update-ut…cord System Boot/Shutdown in UTMP.
[  OK  ] Reached target rpc_pipefs.target.
[  OK  ] Reached target nfs-client.target - NFS client services.
[  OK  ] Reached target remote-fs-p…eparation for Remote File Systems.
[  OK  ] Reached target remote-fs.target - Remote File Systems.
[  OK  ] Started systemd-timesyncd.…0m - Network Time Synchronization.
[  OK  ] Reached target sysinit.target - System Initialization.
[  OK  ] Started systemd-tmpfiles-c… Cleanup of Temporary Directories.
[  OK  ] Reached target time-set.target - System Time Set.
[  OK  ] Started dpkg-db-backup.tim… Daily dpkg database backup timer.
[  OK  ] Started e2scrub_all.timeretadata Check for All Filesystems.
[  OK  ] Started exim4-base.timer - Daily exim4-base housekeeping.
[  OK  ] Started logrotate.timer - Daily rotation of log files.
[  OK  ] Started man-db.timer - Daily man-db regeneration.
[  OK  ] Reached target timers.target - Timer Units.
[  OK  ] Listening on dbus.socket- D-Bus System Message Bus Socket.
[  OK  ] Listening on triggerhappy.socket.
[  OK  ] Reached target sockets.target - Socket Units.
[  OK  ] Reached target basic.target - Basic System.
[  OK  ] Started cron.service -…kground program processing daemon.
        Starting dbus.service - D-Bus System Message Bus...
        Starting e2scrub_reap.serv…e ext4 Metadata Check Snapshots...
        Starting raspi-config.serv…r (unless shift key is pressed)...
        Starting rng-tools-debian.…LSB: rng-tools (Debian variant)...
        Starting rpi-eeprom-update…for Raspberry Pi EEPROM updates...
        Starting rsyslog.service - System Logging Service...
        Starting systemd-logind.se…ice - User Login Management...
[  OK  ] Finished networking.service - Raise network interfaces.
[  OK  ] Started rsyslog.service - System Logging Service.
[  OK  ] Started dbus.service - D-Bus System Message Bus.
[  OK  ] Finished rpi-eeprom-update…k for Raspberry Pi EEPROM updates.
[  OK  ] Started systemd-logind.service - User Login Management.
[  OK  ] Started raspi-config.servi…nor (unless shift key is pressed).
[  OK  ] Reached target network.target - Network.
[  OK  ] Reached target network-online.target - Network is Online.
        Starting exim4.service… LSB: exim Mail Transport Agent...
        Starting rc-local.servicem - /etc/rc.local Compatibility...
        Starting rpc-statd-notify.…- Notify NFS peers of a restart...
        Starting ssh.service - OpenBSD Secure Shell server...
My IP address is 192.168.0.2
        Starting systemd-user-sess…vice - Permit User Sessions...
[  OK  ] Finished e2scrub_reap.serv…ine ext4 Metadata Check Snapshots.
[  OK  ] Started rng-tools-debian.s…- LSB: rng-tools (Debian variant).
Loading FPGA!
[  OK  ] Started rpc-statd-notify.s…m - Notify NFS peers of a restart.
[  15.392296] rc.local[253]: rmdir: failed to remove '/config/device-tree/overlays/blink': No such file or directory
[  OK  ] Finished systemd-user-sess…ervice - Permit User Sessions.
Loading /dev/i2c-1!
[  16.261972] rc.local[274]: rmdir: failed to remove '/config/device-tree/overlays/i2c1': No such file or directory
[  OK  ] Started ssh.service - OpenBSD Secure Shell server.
[  OK  ] Started exim4.service - LSB: exim Mail Transport Agent.
Mounting home directories!
Done!
[  OK  ] Started rc-local.service - /etc/rc.local Compatibility.
[  OK  ] Started getty@tty1.service - Getty on tty1.
[  OK  ] Started serial-getty@ttyS0…rvice - Serial Getty on ttyS0.
[  OK  ] Reached target getty.target - Login Prompts.
[  OK  ] Reached target multi-user.target - Multi-User System.
[  OK  ] Reached target graphical.target - Graphical Interface.
        Starting systemd-update-ut… Record Runlevel Change in UTMP...
[  OK  ] Finished systemd-update-ut… - Record Runlevel Change in UTMP.
Raspbian GNU/Linux 12 dltdc ttyS0
dltdc login:
</pre>


= zzz =
= zzz =

Latest revision as of 18:00, 26 February 2024

DE10-Nano

Links

Additional info

Board revisions

Per https://daq00.triumf.ca/nextcloud/index.php/s/trpnsXK5xKZdjYG#pdfviewer

  • revision A: -A0, EPCQ128
  • revision B: -B0, EPCQ128
  • revision B2: -B0, "17040025-XXXX”, EPCQ64
  • revision C: -C0, EPCQ64

Serial console

DE10-Nano has a built-in USB-serial adapter connected to the ARM CPU console.

Baud rate: 115200 (set in uboot env and in the linux kernel command line)

  • connect a mini-USB (*not* Micto-USB!) cable from mini-USB port on the side of the ethernet connection to a PC
  • "lsusb" will find a usb-serial adapter:
$ lsusb
...
Bus 001 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
...
  • linux will create a ttyUSB device (see system messages if it did not happen)
$ ls -l /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 Aug  8 17:12 /dev/ttyUSB0
minicom -D /dev/ttyUSB0 -b 115200

JTAG

DE10-Nano has a built-in USB blaster.

  • connect Mini-USB (*not* Micro-USB!) on the side of HDMI and power connectors to a PC
  • lsusb will show an altera usb-blaster device:
$ lsusb 
...
Bus 001 Device 008: ID 09fb:6010 Altera 
...
  • jtagconfig will find a usb-blaster and detect it is connected to a Cyclone5 SoC:
$ /daq/daqshare/olchansk/altera/17.1/quartus/bin/jtagconfig
1) DE-SoC [1-1.1]
  4BA00477   SOCVHPS
  02D020DD   5CSEBA6(.|ES)/5CSEMA6/..
  • open quartus, connect to this usb blaster, work it as usual.

JTAG load sof file

quartus_pgm -m JTAG -o "p;output_files/DE10_NANO_SoC_GHRD.sof@2"

Initial flash card

  • 8GB SD flash
  • Partitions
root@daq01:~/de10-nano# fdisk -l /dev/sdb
Disk /dev/sdb: 7.4 GiB, 7901020160 bytes, 15431680 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
Disklabel type: dos
Disk identifier: 0x443b5867

Device     Boot  Start     End Sectors  Size Id Type
/dev/sdb1  *      6144  210943  204800  100M  c W95 FAT32 (LBA)
/dev/sdb2       210944 4700159 4489216  2.1G 83 Linux
/dev/sdb3         2048    6143    4096    2M a2 unknown

de10_nano_linux_console.img

partitions

root@daq01:~/de10-nano# fdisk -l /dev/sdb
Disk /dev/sdb: 7.4 GiB, 7901020160 bytes, 15431680 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
Disklabel type: dos
Disk identifier: 0x55f3145b

Device     Boot   Start     End Sectors   Size Id Type
/dev/sdb1       2121728 3799447 1677720 819.2M  b W95 FAT32
/dev/sdb2         14336 2111487 2097152     1G 83 Linux
/dev/sdb3          2048    4095    2048     1M a2 unknown

boot messages

Welcome to minicom 2.7

OPTIONS: I18n 
Compiled on Feb  7 2016, 13:37:27.
Port /dev/ttyUSB0, 13:52:11

Press CTRL-A Z for help on special keys


U-Boot SPL 2013.01.01 (Oct 12 2016 - 10:38:03)
BOARD : Altera SOCFPGA Cyclone V Board
CLOCK: EOSC1 clock 25000 KHz
CLOCK: EOSC2 clock 25000 KHz
CLOCK: F2S_SDR_REF clock 0 KHz
CLOCK: F2S_PER_REF clock 0 KHz
CLOCK: MPU clock 925 MHz
CLOCK: DDR clock 400 MHz
CLOCK: UART clock 100000 KHz
CLOCK: MMC clock 50000 KHz
CLOCK: QSPI clock 3613 KHz
RESET: COLD
INFO : Watchdog enabled
SDRAM: Initializing MMR registers
SDRAM: Calibrating PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
SDRAM: 1024 MiB
ALTERA DWMMC: 0


U-Boot 2013.01.01 (Oct 12 2016 - 10:40:34)

CPU   : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone V Board
I2C:   ready
DRAM:  1 GiB
MMC:   ALTERA DWMMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Skipped ethaddr assignment due to invalid EMAC address in EEPROM
Net:   mii0
Warning: failed to set MAC address

Hit any key to stop autoboot:  0 
reading u-boot.scr
200 bytes read in 4 ms (48.8 KiB/s)
## Executing script at 02000000
reading soc_system.rbf
** Unable to read file soc_system.rbf **
altera_load: Failed with error code -4
## Starting application at 0x3FF795A4 ...
## Application terminated, rc = 0x0
reading zImage
4686600 bytes read in 226 ms (19.8 MiB/s)
reading socfpga.dtb
25012 bytes read in 6 ms (4 MiB/s)
## Flattened Device Tree blob at 00000100
   Booting using the fdt blob at 0x00000100
   Loading Device Tree to 03ff6000, end 03fff1b3 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.5.0-00198-g6b20a29-dirty (terasic@ubuntu) (gcc version 5.2.1 20151005 (Linaro GCC7
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Terasic DE10 NANO
[    0.000000] Truncating RAM at 0x00000000-0x40000000 to -0x30000000
[    0.000000] Consider using a HIGHMEM enabled kernel.
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 13 pages/cpu @ef9ca000 s21824 r8192 d23232 u53248
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 195072
[    0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 769012K/786432K available (7339K kernel code, 487K rwdata, 1724K rodata, 520K init, 149K )
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
[    0.000000]     vmalloc : 0xf0800000 - 0xff800000   ( 240 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc08e1ea8   (9064 kB)
[    0.000000]       .init : 0xc08e2000 - 0xc0964000   ( 520 kB)
[    0.000000]       .data : 0xc0964000 - 0xc09ddfc4   ( 488 kB)
[    0.000000]        .bss : 0xc09ddfc4 - 0xc0a037a8   ( 150 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  Build-time adjustment of leaf fanout to 32.
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] L2C: platform modifies aux control register: 0x02060000 -> 0x32460000
[    0.000000] L2C: platform provided aux values permit register corruption.
[    0.000000] L2C: DT/platform modifies aux control register: 0x02060000 -> 0x32460000
[    0.000000] L2C-310 erratum 769419 enabled
[    0.000000] L2C-310 enabling early BRESP for Cortex-A9
[    0.000000] L2C-310 full line of zeros enabled for Cortex-A9
[    0.000000] L2C-310 dynamic clock gating enabled, standby mode enabled
[    0.000000] L2C-310 cache controller enabled, 8 ways, 512 kB
[    0.000000] L2C-310: CACHE_ID 0x410030c9, AUX_CTRL 0x46460001
[    0.000000] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
[    0.000006] sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
[    0.000017] Switching to timer-based delay loop, resolution 10ns
[    0.000387] Console: colour dummy device 80x30
[    0.000405] Calibrating delay loop (skipped), value calculated using timer frequency.. 200.00 BogoMIPS (lpj=1)
[    0.000418] pid_max: default: 32768 minimum: 301
[    0.000506] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000517] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.001030] CPU: Testing write buffer coherency: ok
[    0.001056] ftrace: allocating 22895 entries in 68 pages
[    0.036156] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.036408] Setting up static identity map for 0x8280 - 0x82d8
[    0.037772] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.037839] Brought up 2 CPUs
[    0.037852] SMP: Total of 2 processors activated (400.00 BogoMIPS).
[    0.037859] CPU: All CPU(s) started in SVC mode.
[    0.038534] devtmpfs: initialized
[    0.043676] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.043937] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.044889] NET: Registered protocol family 16
[    0.045630] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.052486] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.052498] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.081967] SCSI subsystem initialized
[    0.082231] usbcore: registered new interface driver usbfs
[    0.082295] usbcore: registered new interface driver hub
[    0.082350] usbcore: registered new device driver usb
[    0.082496] sopc@0:usbphy@0 supply vcc not found, using dummy regulator
[    0.083382] pps_core: LinuxPPS API ver. 1 registered
[    0.083392] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.083421] PTP clock support registered
[    0.083567] FPGA manager framework
[    0.084131] Bluetooth: Core ver 2.21
[    0.084187] NET: Registered protocol family 31
[    0.084195] Bluetooth: HCI device and connection manager initialized
[    0.084209] Bluetooth: HCI socket layer initialized
[    0.084219] Bluetooth: L2CAP socket layer initialized
[    0.084243] Bluetooth: SCO socket layer initialized
[    0.084850] clocksource: Switched to clocksource timer
[    0.122985] NET: Registered protocol family 2
[    0.123499] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
[    0.123569] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[    0.123675] TCP: Hash tables configured (established 8192 bind 8192)
[    0.123751] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.123795] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.123980] NET: Registered protocol family 1
[    0.124362] RPC: Registered named UNIX socket transport module.
[    0.124372] RPC: Registered udp transport module.
[    0.124378] RPC: Registered tcp transport module.
[    0.124384] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.124923] hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
[    0.125760] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.134741] NFS: Registering the id_resolver key type
[    0.134851] Key type id_resolver registered
[    0.134860] Key type id_legacy registered
[    0.134917] ntfs: driver 2.1.32 [Flags: R/W].
[    0.135225] jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
[    0.138763] io scheduler noop registered (default)
[    0.143457] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    0.144433] console [ttyS0] disabled
[    0.144470] ffc02000.serial: ttyS0 at MMIO 0xffc02000 (irq = 28, base_baud = 6250000) is a 16550A
[    0.731555] console [ttyS0] enabled
[    0.736743] brd: module loaded
[    0.741896] CAN device driver interface
[    0.746124] socfpga-dwmac ff702000.ethernet: snps,phy-addr property is deprecated
[    0.753714] stmmac - user ID: 0x10, Synopsys ID: 0x37
[    0.758759]  Ring mode enabled
[    0.761800]  DMA HW capability register supported
[    0.766318]  Enhanced/Alternate descriptors
[    0.770665]  Enabled extended descriptors
[    0.774654]  RX Checksum Offload Engine supported (type 2)
[    0.780120]  TX Checksum insertion supported
[    0.784370]  Enable RX Mitigation via HW Watchdog Timer
[    0.790090] socfpga-dwmac ff702000.ethernet eth0: No MDIO subnode found
[    0.802194] libphy: stmmac: probed
[    0.805602] eth0: PHY ID 00221622 at 1 IRQ POLL (stmmac-0:01) active
[    0.812394] ffb40000.usb supply vusb_d not found, using dummy regulator
[    0.819041] ffb40000.usb supply vusb_a not found, using dummy regulator
[    1.104815] dwc2 ffb40000.usb: EPs: 16, dedicated fifos, 8064 entries in SPRAM
[    1.204898] dwc2 ffb40000.usb: DWC OTG Controller
[    1.209605] dwc2 ffb40000.usb: new USB bus registered, assigned bus number 1
[    1.216660] dwc2 ffb40000.usb: irq 40, io mem 0x00000000
[    1.222106] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.228880] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.236081] usb usb1: Product: DWC OTG Controller
[    1.240765] usb usb1: Manufacturer: Linux 4.5.0-00198-g6b20a29-dirty dwc2_hsotg
[    1.248050] usb usb1: SerialNumber: ffb40000.usb
[    1.253141] hub 1-0:1.0: USB hub found
[    1.256923] hub 1-0:1.0: 1 port detected
[    1.261481] usbcore: registered new interface driver usb-storage
[    1.267811] mousedev: PS/2 mouse device common for all mice
[    1.273628] i2c /dev entries driver
[    1.278013] usbcore: registered new interface driver bfusb
[    1.283541] usbcore: registered new interface driver btusb
[    1.289068] Synopsys Designware Multimedia Card Interface Driver
[    1.295224] dw_mmc ff704000.flash: supports-highspeed property is deprecated.
[    1.302401] dw_mmc ff704000.flash: IDMAC supports 32-bit address mode.
[    1.308944] dw_mmc ff704000.flash: Using internal DMA controller.
[    1.315026] dw_mmc ff704000.flash: Version ID is 240a
[    1.320091] dw_mmc ff704000.flash: DW MMC controller at irq 39,32 bit host data width,1024 deep fifo
[    1.329341] dw_mmc ff704000.flash: Got CD GPIO
[    1.364830] dw_mmc ff704000.flash: 1 slots initialized
[    1.370417] ledtrig-cpu: registered to indicate activity on CPUs
[    1.376593] usbcore: registered new interface driver usbhid
[    1.382140] usbhid: USB HID core driver
[    1.386211] fpga_manager fpga0: Altera SOCFPGA FPGA Manager registered
[    1.393264] altera_hps2fpga_bridge sopc@0:fpgabridge@0: fpga bridge [hps2fpga] registered
[    1.401633] altera_hps2fpga_bridge sopc@0:fpgabridge@1: fpga bridge [lwhps2fpga] registered
[    1.410163] altera_hps2fpga_bridge sopc@0:fpgabridge@2: fpga bridge [fpga2hps] registered
[    1.418669] altera_fpga2sdram_bridge sopc@0:fpgabridge@3: fpga bridge [fpga2sdram] registered
[    1.427171] altera_fpga2sdram_bridge sopc@0:fpgabridge@3: driver initialized with handoff 00000000
[    1.436522] oprofile: using arm/armv7-ca9
[    1.441576] NET: Registered protocol family 10
[    1.446710] sit: IPv6 over IPv4 tunneling driver
[    1.451897] NET: Registered protocol family 17
[    1.456373] NET: Registered protocol family 15
[    1.460801] can: controller area network core (rev 20120528 abi 9)
[    1.467012] NET: Registered protocol family 29
[    1.471443] can: raw protocol (rev 20120528)
[    1.475711] can: broadcast manager protocol (rev 20120528 t)
[    1.481353] can: netlink gateway (rev 20130117) max_hops=1
[    1.487085] Bluetooth: RFCOMM TTY layer initialized
[    1.491963] Bluetooth: RFCOMM socket layer initialized
[    1.497111] Bluetooth: RFCOMM ver 1.11
[    1.500856] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    1.506161] Bluetooth: BNEP filters: protocol multicast
[    1.511370] Bluetooth: BNEP socket layer initialized
[    1.516326] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    1.522223] Bluetooth: HIDP socket layer initialized
[    1.527223] 8021q: 802.1Q VLAN Support v1.8
[    1.531420] lib80211: common routines for IEEE802.11 drivers
[    1.537132] Key type dns_resolver registered
[    1.541470] ThumbEE CPU extension supported.
[    1.545747] Registering SWP/SWPB emulation handler
[    1.552065] of_cfs_init
[    1.554574] of_cfs_init: OK
[    1.559702] ttyS0 - failed to request DMA
[    1.563765] Waiting for root device /dev/mmcblk0p2...
[    1.593518] mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz, actual 50000000HZ div = 0)
[    1.603275] mmc0: new high speed SDHC card at address 59b4
[    1.609161] mmcblk0: mmc0:59b4 SD    7.36 GiB 
[    1.614500]  mmcblk0: p1 p2 p3
[    1.675735] EXT4-fs (mmcblk0p2): couldn't mount as ext3 due to feature incompatibilities
[    1.699295] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.707410] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    1.721690] devtmpfs: mounted
[    1.725069] Freeing unused kernel memory: 520K (c08e2000 - c0964000)
[    1.939763] systemd[1]: Failed to insert module 'autofs4': Function not implemented
[    1.948482] systemd[1]: Failed to insert module 'ip_tables': Function not implemented
[    1.968051] random: systemd urandom read with 8 bits of entropy available
[    1.977552] systemd[1]: systemd 226 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSV)
[    1.995853] systemd[1]: Detected architecture arm.

Welcome to The �Ångstr�öm Distribution v2014.12!

[    2.015564] systemd[1]: Set hostname to <socfpga>.
[    2.302710] systemd[1]: bal_car.service: Cannot add dependency job, ignoring: Unit bal_car.service failed to .
[    2.318119] systemd[1]: Listening on networkd rtnetlink socket.
[  OK  ] Listening on networkd rtnetlink socket.
[    2.345118] systemd[1]: Listening on Journal Socket.
[  OK  ] Listening on Journal Socket.
[    2.365016] systemd[1]: Listening on udev Kernel Socket.
[  OK  ] Listening on udev Kernel Socket.
[    2.385100] systemd[1]: Created slice System Slice.
[  OK  ] Created slice System Slice.
[    2.435111] systemd[1]: Starting (null)...
         Starting (null)...
[    2.456404] systemd[1]: Mounting Debug File System...
         Mounting Debug File System...
[    2.486449] systemd[1]: Starting Remount Root and Kernel File Systems...
         Starting Remount Root and Kernel File Systems...
[    2.514859] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    2.535758] systemd[1]: Created slice User and Session Slice.
[  OK  ] Created slice User and Session Slice.
[    2.555249] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Dispatch Password Requests to Console Directory Watch.
[    2.575159] systemd[1]: Created slice system-serial\x2dgetty.slice.
[  OK  ] Created slice system-serial\x2dgetty.slice.
[    2.603891] systemd[1]: Reached target Swap.
[  OK  ] Reached target Swap.
[    2.625080] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
[    2.645112] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Started Forward Password Requests to Wall Directory Watch.
[    2.665003] systemd[1]: Listening on Syslog Socket.
[  OK  ] Listening on Syslog Socket.
[    2.684923] systemd[1]: Reached target Paths.
[  OK  ] Reached target Paths.
[    2.704992] systemd[1]: Listening on Journal Socket (/dev/log).
[  OK  ] Listening on Journal Socket (/dev/log).
[    2.755246] systemd[1]: Starting Journal Service...
         Starting Journal Service...
[    2.776328] systemd[1]: Starting Setup Virtual Console...
         Starting Setup Virtual Console...
[    2.795374] systemd[1]: Created slice system-getty.slice.
[  OK  ] Created slice system-getty.slice.
[    2.816472] systemd[1]: Starting Apply Kernel Variables...
         Starting Apply Kernel Variables...
[    2.836659] systemd[1]: Mounting Configuration File System...
         Mounting Configuration File System...
[    2.855402] systemd[1]: Listening on udev Control Socket.
[  OK  ] Listening on udev Control Socket.
[    2.875004] systemd[1]: Reached target Slices.
[  OK  ] Reached target Slices.
[    2.887644] systemd-journald[707]: File /var/log/journal/15c23ce33f2948b3a0b09409f18dc8a2/system.journal corr.
[    2.904311] systemd[1]: Mounted Debug File System.
[  OK  ] Mounted Debug File System.
[    2.925263] systemd[1]: Mounted Configuration File System.
[  OK  ] Mounted Configuration File System.
[    2.945429] systemd[1]: Started Journal Service.
[  OK  ] Started Journal Service.
[  OK  ] Started (null).
[  OK  ] Started Remount Root and Kernel File Systems.
[  OK  ] Started Setup Virtual Console.
[  OK  ] Started Apply Kernel Variables.
         Starting udev Coldplug all Devices...
         Starting Load/Save Random Seed...
         Starting Create Static Device Nodes in /dev...
         Starting Flush Journal to Persistent Storage...
[  OK  ] Started Load/Save Random Seed.
[  OK  ] Started Create Static Device Nodes in /dev.
[    3.311780] systemd-journald[707]: Received request to flush runtime journal from PID 1
[  OK  ] Reached target Local File Systems (Pre).
[    3.404507] random: nonblocking pool is initialized
         Mounting /tmp...
         Starting udev Kernel Device Manager...
[  OK  ] Mounted /tmp.
[  OK  ] Started Flush Journal to Persistent Storage.
[  OK  ] Started udev Coldplug all Devices.
[  OK  ] Started udev Kernel Device Manager.
[  OK  ] Found device /dev/ttyS0.
[  OK  ] Reached target Local File Systems.
         Starting Create Volatile Files and Directories...
[  OK  ] Started Create Volatile Files and Directories.
         Starting Update UTMP about System Boot/Shutdown...
         Starting Network Time Synchronization...
[  OK  ] Started Update UTMP about System Boot/Shutdown.
[  OK  ] Started Network Time Synchronization.
[  OK  ] Reached target System Time Synchronized.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Timers.
[  OK  ] Listening on RPCbind Server Activation Socket.
         Starting sshd.socket.
         Starting Restore Sound Card State...
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on sshd.socket.
[  OK  ] Started Restore Sound Card State.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting Connection service...
         Starting Login Service...
         Starting Avahi mDNS/DNS-SD Stack...
[  OK  ] Started System Logging Service.
[  OK  ] Started Kernel Logging Service.
[  OK  ] Started D-Bus System Message Bus.
[  OK  ] Started Avahi mDNS/DNS-SD Stack.
         Starting Network Service...
[  OK  ] Started Timestamping service.
         Starting Network Time Service (one-shot ntpdate mode)...
[  OK  ] Started Login Service.
[  OK  ] Started Network Service.
[  OK  ] Started Network Time Service (one-shot ntpdate mode).
[  OK  ] Reached target Network.
         Starting Target Communication Framework agent...
         Starting Network Name Resolution...
[  OK  ] Started Connection service.
[  OK  ] Reached target Remote File Systems.
         Starting Permit User Sessions...
[  OK  ] Started Network Name Resolution.
[  OK  ] Started Target Communication Framework agent.
[    5.037457] eth0: device MAC address ee:c0:c8:04:88:52
[  OK  ] Started Permit User Sessions.
         Starting WPA supplicant...
[    5.128624] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[  OK  ] Started Serial Getty on ttyS0.
[  OK  ] Started Getty on tty1.
[  OK  ] Reached target Login Prompts.
[  OK  ] Reached target Multi-User System.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started WPA supplicant.
[  OK  ] Started Update UTMP about System Runlevel Changes.

.---O---.                                           
|       |                  .-.           o o        
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution socfpga ttyS0

uname -a

root@socfpga:~# uname -a
Linux socfpga 4.5.0-00198-g6b20a29-dirty #8 SMP Thu Apr 27 23:46:29 PDT 2017 armv7l GNU/Linux

/proc/cpuinfo

root@socfpga:~# cat /proc/cpuinfo 
processor       : 0
model name      : ARMv7 Processor rev 0 (v7l)
BogoMIPS        : 200.00
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc09
CPU revision    : 0

processor       : 1
model name      : ARMv7 Processor rev 0 (v7l)
BogoMIPS        : 200.00
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc09
CPU revision    : 0

Hardware        : Altera SOCFPGA
Revision        : 0000
Serial          : 0000000000000000
root@socfpga:~# 

benchmarks

memcpy

root@socfpga:~# g++ -O2 -Wall -Wuninitialized memcpy.cc -o memcpy
root@socfpga:~# ./memcpy 
memcpy       1 KiBytes:    999 MB/sec
memcpy       2 KiBytes:   1569 MB/sec
memcpy       4 KiBytes:   2172 MB/sec
memcpy       8 KiBytes:   2728 MB/sec
memcpy      16 KiBytes:   3118 MB/sec
memcpy      32 KiBytes:   2237 MB/sec
memcpy      64 KiBytes:   1503 MB/sec
memcpy     128 KiBytes:   1290 MB/sec
memcpy     256 KiBytes:    740 MB/sec
memcpy     512 KiBytes:    392 MB/sec
memcpy    1024 KiBytes:    355 MB/sec
memcpy    2048 KiBytes:    331 MB/sec
memcpy    4096 KiBytes:    312 MB/sec
memcpy    8192 KiBytes:    299 MB/sec
memcpy   16384 KiBytes:    298 MB/sec
memcpy   32768 KiBytes:    298 MB/sec
memcpy   65536 KiBytes:    297 MB/sec
memcpy  131072 KiBytes:    297 MB/sec
root@socfpga:~# 

ttcp

  • receive 100 Mbytes/sec
root@socfpga:~# ./ttcp -r -s
ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp
ttcp-r: socket
ttcp-r: accept from 192.168.1.1
ttcp-r: 819200000 bytes in 7.05 real seconds = 113525.45 KB/sec +++
ttcp-r: 106692 I/O calls, msec/call = 0.07, calls/sec = 15140.32
ttcp-r: 0.0user 3.2sys 0:07real 46% 0i+0d 718maxrss 0+2pf 18009+19csw
root@socfpga:~# 
  • transmit 95 Mbytes/sec
root@socfpga:~# ./ttcp -t -s 192.168.1.1 -n 100000
ttcp-t: buflen=8192, nbuf=100000, align=16384/0, port=5001  tcp  -> 192.168.1.1
ttcp-t: socket
ttcp-t: connect
ttcp-t: 819200000 bytes in 8.47 real seconds = 94484.25 KB/sec +++
ttcp-t: 100000 I/O calls, msec/call = 0.09, calls/sec = 11810.53
ttcp-t: 0.0user 1.7sys 0:08real 21% 0i+0d 718maxrss 0+2pf 1346+15csw
root@socfpga:~# 

example projects

Download DE10-Nano_v.1.3.1_HWrevC_SystemCD.zip, unzip, go into Demonstrations/SoC_FPGA, copy DE10_NANO_SoC_GHRD and HPS_FPGA_LED.

Together, they demonstrate how to flash the LEDs from the ARM CPU through the AXI bridge into the FPGA, into the qsys fabric into the PIO controller into the LEDs.

DE10_NANO_SoC_GHRD

  • go to the DE10_NANO_SoC_GHRD
  • go to output_files
  • copy fpga firmware to the ARM machine: scp DE10_NANO_SoC_GHRD.sof soc_system.rbf root@192.168.1.227:
  • this no longer works:
#!/bin/sh
echo 0 > /sys/class/fpga-bridge/hps2fpga/enable
echo 0 > /sys/class/fpga-bridge/fpga2hps/enable
echo 0 > /sys/class/fpga-bridge/lwhps2fpga/enable
dd if=/home/root/DE1_SoC_Computer.rbf of=/dev/fpga0 bs=1M
echo 1 > /sys/class/fpga-bridge/hps2fpga/enable
echo 1 > /sys/class/fpga-bridge/fpga2hps/enable
echo 1 > /sys/class/fpga-bridge/lwhps2fpga/enable
  • THIS DOES NOT WORK - now we have to do this:
   46  mkdir /config
   47  mount -t configfs configfs /config
   48  mkdir /config/device-tree/overlays/test
dtc -O dtb -o load_rbf.dtbo -b0 -I dts < load_rbf.dts
cp load_rbf.dtbo /lib/firmware
cp soc_system.rbf /lib/firmware/de10_soc.rbf
echo load_rbf.dtbo > /config/device-tree/overlays/test/path
root@socfpga:~# cat load_rbf.dts
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target-path = "/soc/base-fpga-region";
#address-cells = <1>;
#size-cells = <1>;
overlay {
firmware-name = "de10_soc.rbf";
#address-cells = <1>;
#size-cells = <1>;
};
};
};
root@socfpga:~# 
daq01:~$ LD_LIBRARY_PATH=/daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64 /daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64/jtagconfig 
1) DE-SoC [1-2]
  4BA00477   SOCVHPS
  02D020DD   5CSEBA6(.|ES)/5CSEMA6/..
    • run jtag programmer
LD_LIBRARY_PATH=/daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64 /daq/daqshare/olchansk/altera/17.1-EDS/qprogrammer/linux64/quartus_pgm -c 1 -m JTAG -o "p;DE10_NANO_SoC_GHRD.sof@2"
  • if sof file loaded correctly, all LEDs will turn on, one LED will flash.

HPS_FPGA_LED

  • Download SoCEDSSetup-17.1.0.590-linux.run
  • Run it, select installation into /daq/daqshare/olchansk/altera/17.1-EDS
  • cd 17.1-EDS/embedded/ds-5_installer, run install.sh
  • Run it, select installation into /daq/daqshare/olchansk/altera/DS-5_v5.27.1
  • (select "skip steps that require root permissions").
  • go to the HPS_FPGA_LED project
  • /daq/daqshare/olchansk/altera/DS-5_v5.27.1/bin/suite_exec sh
  • make SOCEDS_ROOT=/daq/daqshare/olchansk/altera/17.1-EDS/embedded
  • HPS_FPGA_LED will be created
  • copy it to the ARM machine: scp HPS_FPGA_LED root@192.168.1.240:
  • go to the ARM machine, run it. (ARM machine will freeze, no ping)
  • if sof file is loaded, the program will run and flash the LEDs

booting FPGA from EPCS64

Per table 3-2, change the SW10 MSEL pins:

Board orientation is:

  • power connector on the left, eth connector on the right
  • switch position is "up" is "on"; "down" is "off"
on-off-on-off-on-on -> default -> configure from HPS
on-on-on-on-on-on -> configure from HPS
on-off-on-on-off-on -> configure from EPCS64

boot Linux from SD flash

  • take a new 32 GB flash card
  • create 3 partitions: fpga boot partition (contains u-boot), u-boot partition (contains the linux kernel) and the linux userland partition
fdisk -l /dev/sdb
[root@armdaq07 ~]# fdisk -l

Disk /dev/mmcblk0: 31.9 GB, 31914983424 bytes, 62333952 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: 0xddcde1b7

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048        4095        1024   a2  Unknown
/dev/mmcblk0p2            4096     1681816      838860+   b  W95 FAT32
/dev/mmcblk0p3         1683456    62333951    30325248   83  Linux
[root@armdaq07 ~]# 
  • copy the images:
# ls -l /daq/daqstore/olchansk/daq/DE10-Nano/*.img
-rw-r--r-- 1 olchansk users 1945317376 Jun 26  2017 /daq/daqshare/olchansk/DE10-Nano/de10_nano_linux_console.img
-rw-r--r-- 1 olchansk users    1048576 Aug  8 17:30 /daq/daqshare/olchansk/DE10-Nano/image-1-fpga.img
-rw-r--r-- 1 olchansk users  858992640 Aug  8 17:30 /daq/daqshare/olchansk/DE10-Nano/image-2-uboot.img
# dd if=/daq/daqstore/olchansk/daq/DE10-Nano/image-1-fpga.img of=/dev/sdX1  bs=1024k
# dd if=/daq/daqstore/olchansk/daq/DE10-Nano/image-2-uboot.img of=/dev/sdX2  bs=1024k
  • move sdflash card from PC to DE10-Nano
  • start the serial console (see above)
  • cycle the power or reset the DE10-Nano to boot from sd flash
  • on the serial console, you will get the u-boot prompt
  • run "saveenv"
SOCFPGA_CYCLONE5 # saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
SOCFPGA_CYCLONE5 # 
  • change boot partitions:
SOCFPGA_CYCLONE5 # setenv mmcloadpart 2
SOCFPGA_CYCLONE5 # setenv mmcroot /dev/mmcblk0p3
SOCFPGA_CYCLONE5 # setenv callscript 'if fatload mmc 0:2 $fpgadata $scriptfile;then source $fpgadata; else echo Optional boot script not found. Continuing to boot normally; fi;'
SOCFPGA_CYCLONE5 # saveenv
  • set MAC address (the DE10-Nano board has no MAC address chip, so MAC address has to be assigned manually. Use addresses that start with "02:x:x:x:x:x", see "Locally Administered Address Ranges"
SOCFPGA_CYCLONE5 # setenv ethaddr 02:aa:bb:cc:dd:ee
SOCFPGA_CYCLONE5 # saveenv
  • examine result, save and reboot
SOCFPGA_CYCLONE5 # printenv            
...
SOCFPGA_CYCLONE5 # saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
SOCFPGA_CYCLONE5 # 
SOCFPGA_CYCLONE5 # reset
resetting ...
  • the linux kernel should boot, fail to find the root filesystem ("VFS: Unable to mount root fs")
  • move the SD flash card back to the PC
  • create the linux root filesystem
mke2fs -t ext4 -O ^huge_file /dev/sdb3
mount /dev/sdb3 /mnt/tmp
#rsync -av /ladd/data0/backup.os/armdaq05/ /mnt/tmp/
rsync -av /daq/daqshare/olchansk/DE10-Nano/image-3-chronobox/ /mnt/tmp/
sync
  • set the IP address
cd /mnt/tmp/etc/sysconfig/network-scripts
emacs -nw ifcfg-eth0

to read this: (change IPADDR=x.x.x.x as required)

TYPE=Ethernet
BOOTPROTO=none
DNS1=142.90.100.19
DOMAIN=triumf.ca
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
#NAME=static
#UUID=fba7e7fa-0403-4fd6-965e-778e7af0dd99
ONBOOT=yes
#IPADDR=142.90.111.143
IPADDR=142.90.121.107
PREFIX=19
GATEWAY=142.90.100.18
  • eject SD flash card, move it to the DE10-Nano
cd /
umount /dev/sdb3
eject /dev/sdb
  • try to boot

boot Linux from network

uboot version: U-Boot 2013.01.01

  • fw_printenv
  • remember old bootcmd: bootcmd=run callscript; run mmcload; run mmcboot
  • remember old bootargs: bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait
  • fw_setenv bootcmd 'run bridge_enable_handoff; run netboot'
  • fw_setenv ramboot bootz \${loadaddr} - \${fdtaddr}
  • remember to set the MAC address, there is no MAC eeprom!
  • fw_setenv ethaddr 02:aa:bb:cc:dd:01 ### see chronobox page about chronobox MAC assignements
  • fw_setenv bootargs console=ttyS0,115200 ip=dhcp root=/dev/nfs rw nfsroot=192.168.1.1:/zssd/nfsroot/%s,vers=3 panic=15

an even older old bootargs:

  • setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p3 rw rootwait panic=15

update april 2022

root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^ethaddr
ethaddr=02:aa:bb:cc:cb:03
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^bootcmd
bootcmd=run bridge_enable_handoff; run netboot
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^netboot
netboot=dhcp ${bootimage} ; tftp ${fdtaddr} ${fdtimage} ; run ramboot
root@cb03:~# /home/agdaq/packages/libubootenv/build/src/fw_printenv  | grep ^ramboot
ramboot=bootz ${loadaddr} - ${fdtaddr}

u-boot environment access from linux

  • on chronobox cb02 Raspbian-10
  • apt install cmake libyaml-dev
  • mkdir ~/git; cd ~/git
  • git clone https://github.com/sbabic/libubootenv
  • cd libubootenv
  • mkdir build; cd build; cmake ..; make; ls -l ./src/fw_printenv

use fw_printenv from above

/dev/mmcblk0		0x200		0x1000
  • fw_printenv should work (it should NOT print "Warning: Bad CRC, using default environment" as the very first line)

Example: set MAC address from Linux:

fw_setenv ethaddr 02:aa:bb:cc:dd:01
fw_printenv | grep ethaddr=
ethaddr=02:aa:bb:cc:dd:01

Install busybox

For reasons unclear the "devmem" command (part of busybox) is missing from the centos7 userland image. To install it, do this:

wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-armv7r
file busybox-armv7r 
chmod a+x ./busybox-armv7r 
./busybox-armv7r 
./busybox-armv7r devmem

FPGA bridge access magic

special magic may be needed to enabled /dev/mem access to the FPGA bridge, per https://lists.rocketboards.org/pipermail/rfi/2015-August/003259.html

HI,

By default the bridges will only allow privileged accesses in Arria 10.  At
this time i am not aware of any way to adjust this from linux space, but it
is entirely configurable from a uboot prompt.

In:    serial
Out:   serial
Err:   serial
Model: SOCFPGA Arria10 Dev Kit
Net:   dwmac.ff800000
Hit any key to stop autoboot:  0
SOCFPGA_ARRIA10 #
SOCFPGA_ARRIA10 #
SOCFPGA_ARRIA10 # mw.l 0xFFD13500 0x1
SOCFPGA_ARRIA10 # mw.l 0xFFD13504 0x1
SOCFPGA_ARRIA10 # mw.l 0xFFD11004 0xffffffff
SOCFPGA_ARRIA10 # md.l 0xFFD0502C 1
ffd0502c: 0000003f                               ?...
SOCFPGA_ARRIA10 # mw.l 0xFFD0502C 0x3C
SOCFPGA_ARRIA10 # md.l 0xFFD0502C 1
ffd0502c: 0000003c                               <...
SOCFPGA_ARRIA10 # md.l 0xc0000000 10
c0000000: 00000000 00000000 00000000 00000000    ................
c0000010: 00000000 00000000 00000000 00000000    ................
c0000020: 00000000 00000000 00000000 00000000    ................
c0000030: 00000000 00000000 00000000 00000000    ................
SOCFPGA_ARRIA10 #

the above could easily be added to a uboot script and run automatically at
boot.

In linux, you can then


root at arria10:~# devmem --help
BusyBox v1.22.1 (2015-05-31 18:07:25 UTC) multi-call binary.

Usage: devmem ADDRESS [WIDTH [VALUE]]

Read/write from physical address

        ADDRESS Address to act upon
        WIDTH   Width (8/16/...)
        VALUE   Data to be written

root at arria10:~# devmem 0xc0000000 32 0xdeadbeef
root at arria10:~# devmem 0xc0000000 32
0xDEADBEEF
root at arria10:~#

to test unprivileged accesses.

--dalon

Load FPGA from Linux

THIS DOES NOT WORK

from here: https://forum.rocketboards.org/t/load-fpga-rbf-from-device-tree-overlay-example/999/16

Finally, I found a working solution:

load_rbf.dts:

/dts-v1/;
/plugin/;
/ {
fragment@0 {
target-path = "/soc/base-fpga-region";
#address-cells = <1>;
#size-cells = <1>;
overlay {
firmware-name = "de10_soc.rbf";
#address-cells = <1>;
#size-cells = <1>;
};
};
};

dtc -O dtb -o load_rbf.dtbo -b 0 -@ load_rbf.dts

Copy load_rbf.dtbo and de10_soc.rbf to /lib/firmware

mount -t configfs configfs /config
rmdir /config/device-tree/overlays/test
mkdir /config/device-tree/overlays/test
echo load_rbf.dtbo > /config/device-tree/overlays/test/path

The magic command is:
devmem 0xff800000 32 0x00000019

I really don’t know what this does. However, by looking at how the bridge is enabled in u-boot:

#bridge_enable_handoff=mw $fpgaintf ${fpgaintf_handoff}; go $fpga2sdram_apply; mw $fpga2sdram ${fpga2sdram_handoff}; mw $axibridge ${axibridge_handoff}; mw $l3remap ${l3remap_handoff}

#mw $fpgaintf ${fpgaintf_handoff};
#fpgaintf=ffd08028
#fpgaintf_handoff=0x00000000
->devmem 0xffd08028 32 0x00000000

#go $fpga2sdram_apply;
->??

#mw $fpga2sdram ${fpga2sdram_handoff};
#fpga2sdram=ffc25080
#fpga2sdram_handoff=0x00000000
->devmem 0xffc25080 32 0x00000000

#mw $axibridge ${axibridge_handoff};
#axibridge=ffd0501c
#axibridge_handoff=0x00000000
->devmem 0xffd0501c 32 0x00000000

#mw $l3remap ${l3remap_handoff}
#l3remap=ff800000
#l3remap_handoff=0x00000019
->devmem 0xff800000 32 0x00000019

I found that this register needs to be written to 0x19 and then there is no bus error any more.



How to load RBF file from Linux kernel 4.1 on DE10-Nano SoC
2

THE ABOVE DOES NOT WORK: echo load_rbf.dtbo > /config/device-tree/overlays/test/path BOMBS.

from here: https://forum.rocketboards.org/t/rbf-with-overlay/1800

Hi, this issue is resolved by adding following change in
arch/arm/boot/dts/socfpga.dtsi

base_fpga_region: base-fpga-region {
compatible = “fpga-region”;
fpga-mgr = <&fpgamgr0>;
fpga-bridges = <&fpga_bridge0>;

                    #address-cells = <0x1>;
                    #size-cells = <0x1>;
            };
modifying

UPDATED 9feb2024

/dts-v1/;
/plugin/;

/{
        fragment@0 {
        target-path = "/soc/base-fpga-region";
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <1>;
            firmware-name = "blink.rbf";
        };
    };
};
  • dtc -O dtb -o blink.dtbo -b 0 -@ blink.dtso
  • cp blink.dtbo /lib/firmware
  • cp blink.rbf /lib/firmware
  • mkdir -p /config
  • mount -t configfs configfs /config
  • rmdir /config/device-tree/overlays/blink
  • mkdir /config/device-tree/overlays/blink
  • echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
  • BOMBS: dmesg: overlay: find target, node: /fragment@0, path '/soc/base-fpga-region' not found
  • sure enough, there is no /soc/base-fpga-region ni the device tree at /sys/firmware/devicetree
  • I think I have a bum socfpga.dtb file that was generated by ??? for which kernel, etc...
  • use de0 dtb file:
  • cp /home/olchansk/daq/linux/linux-socfpga/arch/arm/boot/dts/socfpga_cyclone5_de0_nano_soc.dtb /tftpboot/socfpga.dtb
  • reboot ok
  • observe /dev/i2c-1 is gone, only /dev/i2c-0 is there.
  • observe /sys/firmware/devicetree/base/soc/base-fpga-region is there, name matches what's in blink.dtso
  • mkdir /config/device-tree/overlays/blink
  • echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
  • BOMBS: because we did not supply a valid rbf file (and did not set the boot mode switches)
[  161.764436] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  161.765026] fpga_manager fpga0: loading /lib/firmware/blink.rbf failed with error -22
[  161.765046] fpga_manager fpga0: Direct firmware load for blink.rbf failed with error -22
[  161.765063] fpga_manager fpga0: Error requesting firmware blink.rbf
[  161.765072] fpga_region region0: failed to load FPGA image
[  161.765085] OF: overlay: overlay changeset pre-apply notifier error -22, target: /soc/base-fpga-region
[  161.765110] create_overlay: Failed to create overlay (err=-22)
  • copy correct RBF file to /lib/firmware/blink.rbf
  • rmdir /config/device-tree/overlays/blink
  • mkdir /config/device-tree/overlays/blink
  • echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
  • BOMBS: we did not set the MSEL jumpers!
[  958.339222] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  958.695612] fpga_manager fpga0: Error after writing image data to FPGA
[  958.696835] fpga_region region0: failed to load FPGA image
[  958.696853] OF: overlay: overlay changeset pre-apply notifier error -110, target: /soc/base-fpga-region
[  958.696888] create_overlay: Failed to create overlay (err=-110)
  • set MSEL to "all on", power up, boot ok
  • echo -n "blink.dtbo" > /config/device-tree/overlays/blink/path
  • light blink, then it goes into a reset cycle...
  • sure enough bad power supply, no 5VDC, see 4.2..3.5V, find a proper DE10 power supply, boot okey, try again!
  • success
[  108.122978] fpga_manager fpga0: writing blink.rbf to Altera SOCFPGA FPGA Manager
[  108.735916] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/base-fpga-region/firmware-name

add missing i2c-1

copy snippet from here: https://github.com/intel/de10-nano-hardware/blob/master/devicetrees/de10-nano-base.dtsi

i2c1.dtso

/plugin/;

/{
    fragment@0 {
        target-path = "/soc/i2c@ffc05000";
        __overlay__ {
            status = "okay";
            clock-frequency = <100000>;
            i2c-sda-hold-time-ns = <500>;
        };
    };
};
emacs -nw i2c1.dtso
dtc -O dtb -o i2c1.dtbo -b 0 -@ i2c1.dtso
cp i2c1.dtbo /lib/firmware/
mkdir /config/device-tree/overlays/i2c1
echo -n "i2c1.dtbo" > /config/device-tree/overlays/i2c1/path
[  836.451323] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/i2c@ffc05000/status
root@dltdc:~# ls -l /dev/i2c*
crw-rw-rw- 1 root i2c 89, 0 Feb  9 21:51 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Feb  9 22:15 /dev/i2c-1
root@dltdc:~# i2cdetect -y -r 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@dltdc:~# 

after setting correct i2c hold time, connected to DLDB board:

root@dltdc:~# i2cdetect -y -r 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- 47 48 49 4a 4b -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@dltdc:~# 

after running dldb script, 0x21 and 0x26 also show up:

root@dltdc:~# i2cdetect -y -r 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- 21 -- -- -- -- 26 -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- 47 48 49 4a 4b -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@dltdc:~# 

Build Linux kernel

-rwxr-xr-x 1 olchansk users 5112608 Feb 3 18:31 arch/arm/boot/zImage

  • try to boot it?

new boot messages

2024 feb 26

resetting ...

U-Boot SPL 2013.01.01 (Mar 06 2019 - 19:53:19)
BOARD : Altera SOCFPGA Cyclone V Board
CLOCK: EOSC1 clock 25000 KHz
CLOCK: EOSC2 clock 25000 KHz
CLOCK: F2S_SDR_REF clock 0 KHz
CLOCK: F2S_PER_REF clock 0 KHz
CLOCK: MPU clock 800 MHz
CLOCK: DDR clock 400 MHz
CLOCK: UART clock 100000 KHz
CLOCK: MMC clock 50000 KHz
CLOCK: QSPI clock 3125 KHz
RESET: WARM
INFO : Watchdog enabled
SDRAM: Initializing MMR registers
SDRAM: Calibrating PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
SDRAM: 1024 MiB
ALTERA DWMMC: 0


U-Boot 2013.01.01-g0c9a3bd-dirty (Feb 28 2019 - 16:03:30)

CPU   : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone V Board
I2C:   ready
DRAM:  1 GiB
MMC:   ALTERA DWMMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   mii0
Hit any key to stop autoboot:  0 
## Starting application at 0x3FF785A8 ...
## Application terminated, rc = 0x0
Waiting for PHY auto negotiation to complete... done
ENET Speed is 1000 Mbps - FULL duplex connection
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.0.2
Using mii0 device
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'zImage'.
Load address: 0x8000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ####################
         3.5 MiB/s
done
Bytes transferred = 5056104 (4d2668 hex)
Using mii0 device
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'socfpga.dtb'.
Load address: 0x100
Loading: ##
         3.2 MiB/s
done
Bytes transferred = 26458 (675a hex)
## Flattened Device Tree blob at 00000100
   Booting using the fdt blob at 0x00000100
   reserving fdt memory region: addr=0 size=1000
   Loading Device Tree to 03ff6000, end 03fff759 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 6.1.55-246590-g57cf7f3b7f73 (olchansk@daq00.triumf.ca) (arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~224
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Terasic DE-0(Atlas)
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000002fffffff]
[    0.000000]   HighMem  [mem 0x0000000030000000-0x000000003fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] percpu: Embedded 15 pages/cpu s30228 r8192 d23020 u61440
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 260608
[    0.000000] Kernel command line: console=ttyS0,115200 ip=dhcp root=/dev/nfs rw nfsroot=192.168.0.1:/nfsroot/%s,vers=3 panic=15
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes, linear)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 1027064K/1048576K available (8192K kernel code, 850K rwdata, 1756K rodata, 1024K init, 154K bss, 21512K reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] ftrace: allocating 26007 entries in 77 pages
[    0.000000] ftrace: allocated 77 pages with 4 groups
[    0.000000] trace event string verifier disabled
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000]  Rude variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] L2C: DT/platform modifies aux control register: 0x02060000 -> 0x32460000
[    0.000000] L2C-310 erratum 769419 enabled
[    0.000000] L2C-310 enabling early BRESP for Cortex-A9
[    0.000000] L2C-310 full line of zeros enabled for Cortex-A9
[    0.000000] L2C-310 ID prefetch enabled, offset 8 lines
[    0.000000] L2C-310 dynamic clock gating enabled, standby mode enabled
[    0.000000] L2C-310 cache controller enabled, 8 ways, 512 kB
[    0.000000] L2C-310: CACHE_ID 0x410030c9, AUX_CTRL 0x76460001
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
[    0.000001] sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
[    0.000016] Switching to timer-based delay loop, resolution 10ns
[    0.000388] Console: colour dummy device 80x30
[    0.000433] Calibrating delay loop (skipped), value calculated using timer frequency.. 200.00 BogoMIPS (lpj=1000000)
[    0.000447] CPU: Testing write buffer coherency: ok
[    0.000486] Spectre V2: workarounds disabled by configuration
[    0.000491] pid_max: default: 32768 minimum: 301
[    0.000671] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.000692] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[    0.001573] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.002598] cblist_init_generic: Setting adjustable number of callback queues.
[    0.002607] cblist_init_generic: Setting shift to 1 and lim to 1.
[    0.002758] Setting up static identity map for 0x100000 - 0x100060
[    0.002931] rcu: Hierarchical SRCU implementation.
[    0.002938] rcu:     Max phase no-delay instances is 1000.
[    0.003657] smp: Bringing up secondary CPUs ...
[    0.004484] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.004611] smp: Brought up 1 node, 2 CPUs
[    0.004623] SMP: Total of 2 processors activated (400.00 BogoMIPS).
[    0.004632] CPU: All CPU(s) started in SVC mode.
[    0.005260] devtmpfs: initialized
[    0.009770] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.010033] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.010053] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
[    0.010281] 
[    0.010286] *************************************************************
[    0.010290] **     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **
[    0.010294] **                                                         **
[    0.010297] **  IOMMU DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL  **
[    0.010300] **                                                         **
[    0.010303] ** This means that this kernel is built to expose internal **
[    0.010306] ** IOMMU data structures, which may compromise security on **
[    0.010309] ** your system.                                            **
[    0.010312] **                                                         **
[    0.010315] ** If you see this message and you are not debugging the   **
[    0.010318] ** kernel, report this immediately to your vendor!         **
[    0.010321] **                                                         **
[    0.010323] **     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **
[    0.010326] *************************************************************
[    0.010915] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.012196] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.013095] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.013107] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.035354] iommu: Default domain type: Translated 
[    0.035365] iommu: DMA domain TLB invalidation policy: strict mode 
[    0.035789] FPGA manager framework
[    1.191732] clocksource: Switched to clocksource timer1
[    1.202145] NET: Registered PF_INET protocol family
[    1.202415] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    1.204370] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    1.204415] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    1.204431] TCP established hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    1.204510] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)
[    1.204749] TCP: Hash tables configured (established 8192 bind 8192)
[    1.204913] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
[    1.204964] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
[    1.205205] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    1.206139] RPC: Registered named UNIX socket transport module.
[    1.206154] RPC: Registered udp transport module.
[    1.206159] RPC: Registered tcp transport module.
[    1.206163] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.218948] hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
[    1.220332] workingset: timestamp_bits=30 max_order=18 bucket_order=0
[    1.225256] DLM installed
[    1.226923] NFS: Registering the id_resolver key type
[    1.226962] Key type id_resolver registered
[    1.226969] Key type id_legacy registered
[    1.227061] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    1.227070] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    1.227640] bounce: pool size: 64 pages
[    1.227733] io scheduler mq-deadline registered
[    1.227742] io scheduler kyber registered
[    1.232392] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    1.233407] printk: console [ttyS0] disabled
[    1.233436] ffc02000.serial0: ttyS0 at MMIO 0xffc02000 (irq = 30, base_baud = 6250000) is a 16550A
[    1.943525] printk: console [ttyS0] enabled
[    1.948402] ffc03000.serial1: ttyS1 at MMIO 0xffc03000 (irq = 31, base_baud = 6250000) is a 16550A
[    1.959088] socfpga-dwmac ff702000.ethernet: error -ENXIO: IRQ macirq_rx0 not found
[    1.966755] socfpga-dwmac ff702000.ethernet: error -ENXIO: IRQ macirq_tx0 not found
[    1.974410] socfpga-dwmac ff702000.ethernet: IRQ eth_wake_irq not found
[    1.981003] socfpga-dwmac ff702000.ethernet: IRQ eth_lpi not found
[    1.987287] socfpga-dwmac ff702000.ethernet: PTP uses main clock
[    1.993520] socfpga-dwmac ff702000.ethernet: Version ID not available
[    1.999948] socfpga-dwmac ff702000.ethernet:         DWMAC1000
[    2.005182] socfpga-dwmac ff702000.ethernet: DMA HW capability register supported
[    2.012657] socfpga-dwmac ff702000.ethernet: RX Checksum Offload Engine supported
[    2.020111] socfpga-dwmac ff702000.ethernet: COE Type 2
[    2.025327] socfpga-dwmac ff702000.ethernet: TX Checksum insertion supported
[    2.032365] socfpga-dwmac ff702000.ethernet: Enhanced/Alternate descriptors
[    2.039301] socfpga-dwmac ff702000.ethernet: Extended descriptors not supported
[    2.046589] socfpga-dwmac ff702000.ethernet: Ring mode enabled
[    2.052408] socfpga-dwmac ff702000.ethernet: TX COE limited to 0 tx queues
[    2.068051] Micrel KSZ9031 Gigabit PHY stmmac-0:01: attached PHY driver (mii_bus:phy_addr=stmmac-0:01, irq=POLL)
[    2.079723] i2c_dev: i2c /dev entries driver
[    2.084211] Synopsys Designware Multimedia Card Interface Driver
[    2.091185] fpga_manager fpga0: Altera SOCFPGA FPGA Manager registered
[    2.098288] NET: Registered PF_PACKET protocol family
[    2.103359] NET: Registered PF_KEY protocol family
[    2.108246] sctp: Hash tables configured (bind 512/512)
[    2.113697] Key type dns_resolver registered
[    2.118024] ThumbEE CPU extension supported.
[    2.122313] Registering SWP/SWPB emulation handler
[    2.132510] of-fpga-region soc:base-fpga-region: FPGA Region probed
[    2.138956] of_cfs_init
[    2.141429] of_cfs_init: OK
[    2.144978] socfpga-dwmac ff702000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[    2.239826] socfpga-dwmac ff702000.ethernet eth0: PHY [stmmac-0:01] driver [Micrel KSZ9031 Gigabit PHY] (irq=POLL)
[    2.260183] dwmac1000: Master AXI performs any burst length
[    2.265757] socfpga-dwmac ff702000.ethernet eth0: No Safety Features support found
[    2.283960] socfpga-dwmac ff702000.ethernet eth0: configuring for phy/rgmii link mode
[    5.433280] socfpga-dwmac ff702000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[    5.471699] Sending DHCP requests ., OK
[    5.535557] IP-Config: Got DHCP answer from 192.168.0.1, my address is 192.168.0.2
[    5.543120] IP-Config: Complete:
[    5.546336]      device=eth0, hwaddr=02:aa:bb:cc:dd:aa, ipaddr=192.168.0.2, mask=255.255.255.0, gw=192.168.0.1
[    5.556313]      host=dltdc, domain=, nis-domain=(none)
[    5.561520]      bootserver=192.168.0.1, rootserver=192.168.0.1, rootpath=/nfsroot/%s,vers=3,tcp
[    5.561529]      nameserver0=192.168.0.1
[    5.574646] dw-apb-uart ffc02000.serial0: forbid DMA for kernel console
[    5.612231] VFS: Mounted root (nfs filesystem) on device 0:15.
[    5.618429] devtmpfs: mounted
[    5.624790] Freeing unused kernel image (initmem) memory: 1024K
[    5.651982] Run /sbin/init as init process
[    6.017202] systemd[1]: System time before build time, advancing clock.
[    6.065983] systemd[1]: systemd 252.17-1~deb12u1+rpi1 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +G)
[    6.099280] systemd[1]: Detected architecture arm.

Welcome to Raspbian GNU/Linux 12 (bookworm)!

[    7.552976] systemd[1]: Queued start job for default target graphical.target.
[    7.566651] systemd[1]: Created slice system-getty.slice - Slice /system/getty.
[  OK  ] Created slice system-getty.slice - Slice /system/getty.
[    7.613726] systemd[1]: Created slice system-modprobe.slice - Slice /system/modprobe.
[  OK  ] Created slice system-modpr…lice - Slice /system/modprobe.
[    7.663722] systemd[1]: Created slice system-serial\x2dgetty.slice - Slice /system/serial-getty.
[  OK  ] Created slice system-seria… - Slice /system/serial-getty.
[    7.712896] systemd[1]: Created slice user.slice - User and Session Slice.
[  OK  ] Created slice user.slice - User and Session Slice.
[    7.742346] systemd[1]: Started systemd-ask-password-console.path - Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started systemd-ask-passwo…quests to Console Directory Watch.
[    7.782280] systemd[1]: Started systemd-ask-password-wall.path - Forward Password Requests to Wall Directory Watch.
[  OK  ] Started systemd-ask-passwo… Requests to Wall Directory Watch.
[    7.832956] systemd[1]: Set up automount proc-sys-fs-binfmt_misc.automount - Arbitrary Executable File Formats File System Automount.
[  OK  ] Set up automount proc-sys-…rmats File System Automount Point.
[    7.872213] systemd[1]: Reached target cryptsetup.target - Local Encrypted Volumes.
[  OK  ] Reached target cryptsetup.…get - Local Encrypted Volumes.
[    7.902149] systemd[1]: Reached target integritysetup.target - Local Integrity Protected Volumes.
[  OK  ] Reached target integrityse…Local Integrity Protected Volumes.
[    7.932298] systemd[1]: Reached target paths.target - Path Units.
[  OK  ] Reached target paths.target - Path Units.
[    7.972257] systemd[1]: Reached target slices.target - Slice Units.
[  OK  ] Reached target slices.target - Slice Units.
[    8.002188] systemd[1]: Reached target swap.target - Swaps.
[  OK  ] Reached target swap.target - Swaps.
[    8.032131] systemd[1]: Reached target veritysetup.target - Local Verity Protected Volumes.
[  OK  ] Reached target veritysetup… - Local Verity Protected Volumes.
[    8.073573] systemd[1]: Listening on syslog.socket - Syslog Socket.
[  OK  ] Listening on syslog.socket - Syslog Socket.
[    8.112499] systemd[1]: Listening on systemd-initctl.socket - initctl Compatibility Named Pipe.
[  OK  ] Listening on systemd-initc… initctl Compatibility Named Pipe.
[    8.169649] systemd[1]: systemd-journald-audit.socket - Journal Audit Socket was skipped because of an unmet condition check (Condit.
[    8.184670] systemd[1]: Listening on systemd-journald-dev-log.socket - Journal Socket (/dev/log).
[  OK  ] Listening on systemd-journ…t - Journal Socket (/dev/log).
[    8.222929] systemd[1]: Listening on systemd-journald.socket - Journal Socket.
[  OK  ] Listening on systemd-journald.socket - Journal Socket.
[    8.254492] systemd[1]: Listening on systemd-udevd-control.socket - udev Control Socket.
[  OK  ] Listening on systemd-udevd….socket - udev Control Socket.
[    8.302768] systemd[1]: Listening on systemd-udevd-kernel.socket - udev Kernel Socket.
[  OK  ] Listening on systemd-udevd…l.socket - udev Kernel Socket.
[    8.342659] systemd[1]: dev-hugepages.mount - Huge Pages File System was skipped because of an unmet condition check (ConditionPathE.
[    8.402235] systemd[1]: Mounting dev-mqueue.mount - POSIX Message Queue File System...
         Mounting dev-mqueue.mount��POSIX Message Queue File System...
[    8.438176] systemd[1]: Mounting sys-kernel-debug.mount - Kernel Debug File System...
         Mounting sys-kernel-debug.… - Kernel Debug File System...
[    8.475957] systemd[1]: Mounting sys-kernel-tracing.mount - Kernel Trace File System...
         Mounting sys-kernel-tracin… - Kernel Trace File System...
[    8.522462] systemd[1]: auth-rpcgss-module.service - Kernel Module supporting RPCSEC_GSS was skipped because of an unmet condition c.
[    8.545330] systemd[1]: Starting fake-hwclock.service - Restore / save the current clock...
         Starting fake-hwclock.serv…estore / save the current clock...
[    8.587796] systemd[1]: Starting keyboard-setup.service - Set the console keyboard layout...
         Starting keyboard-setup.se…Set the console keyboard layout...
[    8.622164] systemd[1]: kmod-static-nodes.service - Create List of Static Device Nodes was skipped because of an unmet condition che.
[    8.682591] systemd[1]: Starting modprobe@configfs.service - Load Kernel Module configfs...
         Starting modprobe@configfs…m - Load Kernel Module configfs...
[    8.718106] systemd[1]: Starting modprobe@dm_mod.service - Load Kernel Module dm_mod...
         Starting modprobe@dm_mod.s…[0m - Load Kernel Module dm_mod...
[    8.767301] systemd[1]: Starting modprobe@drm.service - Load Kernel Module drm...
         Starting modprobe@drm.service - Load Kernel Module drm...
[    8.807471] systemd[1]: Starting modprobe@efi_pstore.service - Load Kernel Module efi_pstore...
         Starting modprobe@efi_psto…- Load Kernel Module efi_pstore...
[    8.847142] systemd[1]: Starting modprobe@fuse.service - Load Kernel Module fuse...
         Starting modprobe@fuse.ser…e - Load Kernel Module fuse...
[    8.887359] systemd[1]: Starting modprobe@loop.service - Load Kernel Module loop...
         Starting modprobe@loop.ser…e - Load Kernel Module loop...
[    8.934417] systemd[1]: systemd-journald.service: unit configures an IP firewall, but the local system does not support BPF/cgroup f.
[    8.947421] systemd[1]: (This warning is only shown for the first unit using IP firewalling.)
[    8.992616] systemd[1]: Starting systemd-journald.service - Journal Service...
         Starting systemd-journald.service - Journal Service...
[    9.031231] systemd[1]: Starting systemd-modules-load.service - Load Kernel Modules...
         Starting systemd-modules-l…rvice - Load Kernel Modules...
[    9.086842] systemd[1]: Starting systemd-remount-fs.service - Remount Root and Kernel File Systems...
         Starting systemd-remount-f…nt Root and Kernel File Systems...
[    9.146808] systemd[1]: Starting systemd-udev-trigger.service - Coldplug All udev Devices...
         Starting systemd-udev-trig…[0m - Coldplug All udev Devices...
[    9.201902] systemd[1]: Mounted dev-mqueue.mount - POSIX Message Queue File System.
[  OK  ] Mounted dev-mqueue.mount- POSIX Message Queue File System.
[    9.244473] systemd[1]: Mounted sys-kernel-debug.mount - Kernel Debug File System.
[  OK  ] Mounted sys-kernel-debug.m…nt - Kernel Debug File System.
[    9.283469] systemd[1]: Mounted sys-kernel-tracing.mount - Kernel Trace File System.
[  OK  ] Mounted sys-kernel-tracing…nt - Kernel Trace File System.
[    9.323240] systemd[1]: Finished fake-hwclock.service - Restore / save the current clock.
[  OK  ] Finished fake-hwclock.serv… Restore / save the current clock.
[    9.396923] systemd[1]: Started systemd-journald.service - Journal Service.
[  OK  ] Started systemd-journald.service - Journal Service.
[  OK  ] Finished keyboard-setup.se…- Set the console keyboard layout.
[  OK  ] Finished modprobe@configfs…[0m - Load Kernel Module configfs.
[  OK  ] Finished modprobe@dm_mod.s…e - Load Kernel Module dm_mod.
[  OK  ] Finished modprobe@drm.service - Load Kernel Module drm.
[  OK  ] Finished modprobe@efi_psto…m - Load Kernel Module efi_pstore.
[  OK  ] Finished modprobe@fuse.service - Load Kernel Module fuse.
[  OK  ] Finished modprobe@loop.service - Load Kernel Module loop.
[  OK  ] Finished systemd-modules-l…service - Load Kernel Modules.
[  OK  ] Finished systemd-remount-f…ount Root and Kernel File Systems.
[  OK  ] Finished systemd-udev-trig…e - Coldplug All udev Devices.
         Mounting sys-kernel-config…ernel Configuration File System...
         Starting ifupdown-pre.serv…ynchronize boot up for ifupdown...
         Starting systemd-journal-f…h Journal to Persistent Storage...
         Starting systemd-random-se…ice - Load/Save Random Seed...
[    9.925670] systemd-journald[92]: Received client request to flush runtime journal.
[    9.948264] systemd-journald[92]: File /var/log/journal/ffb6cc161fe042069f9d95266bfc1324/system.journal corrupted or uncleanly shut .
         Starting systemd-sysctl.se…ce - Apply Kernel Variables...
         Starting systemd-sysusers.…rvice - Create System Users...
[  OK  ] Mounted sys-kernel-config.… Kernel Configuration File System.
[  OK  ] Finished ifupdown-pre.serv… synchronize boot up for ifupdown.
[  OK  ] Finished systemd-sysctl.service - Apply Kernel Variables.
[  OK  ] Finished systemd-sysusers.service - Create System Users.
         Starting systemd-tmpfiles-…ate Static Device Nodes in /dev...
[  OK  ] Finished systemd-journal-f…ush Journal to Persistent Storage.
[  OK  ] Finished systemd-tmpfiles-…reate Static Device Nodes in /dev.
[  OK  ] Reached target local-fs-pr…reparation for Local File Systems.
[  OK  ] Reached target local-fs.target - Local File Systems.
         Starting console-setup.ser…m - Set console font and keymap...
         Starting networking.service - Raise network interfaces...
         Starting systemd-binfmt.se…et Up Additional Binary Formats...
         Starting systemd-tmpfiles-… Volatile Files and Directories...
         Starting systemd-udevd.ser…ger for Device Events and Files...
[  OK  ] Finished console-setup.ser…[0m - Set console font and keymap.
         Mounting proc-sys-fs-binfm…utable File Formats File System...
[  OK  ] Mounted proc-sys-fs-binfmt…ecutable File Formats File System.
[  OK  ] Finished systemd-random-se…rvice - Load/Save Random Seed.
[  OK  ] Finished systemd-binfmt.se… Set Up Additional Binary Formats.
[  OK  ] Started systemd-udevd.serv…nager for Device Events and Files.
[  OK  ] Finished systemd-tmpfiles-…te Volatile Files and Directories.
         Mounting run-rpc_pipefs.mount - RPC Pipe File System...
[  OK  ] Started haveged.servicemon based on the HAVEGE algorithm.
         Starting systemd-timesyncd… - Network Time Synchronization...
         Starting systemd-update-ut…rd System Boot/Shutdown in UTMP...
[  OK  ] Mounted run-rpc_pipefs.mount - RPC Pipe File System.
[  OK  ] Found device dev-ttyS0.device - /dev/ttyS0.
[  OK  ] Finished systemd-update-ut…cord System Boot/Shutdown in UTMP.
[  OK  ] Reached target rpc_pipefs.target.
[  OK  ] Reached target nfs-client.target - NFS client services.
[  OK  ] Reached target remote-fs-p…eparation for Remote File Systems.
[  OK  ] Reached target remote-fs.target - Remote File Systems.
[  OK  ] Started systemd-timesyncd.…0m - Network Time Synchronization.
[  OK  ] Reached target sysinit.target - System Initialization.
[  OK  ] Started systemd-tmpfiles-c… Cleanup of Temporary Directories.
[  OK  ] Reached target time-set.target - System Time Set.
[  OK  ] Started dpkg-db-backup.tim… Daily dpkg database backup timer.
[  OK  ] Started e2scrub_all.timeretadata Check for All Filesystems.
[  OK  ] Started exim4-base.timer - Daily exim4-base housekeeping.
[  OK  ] Started logrotate.timer - Daily rotation of log files.
[  OK  ] Started man-db.timer - Daily man-db regeneration.
[  OK  ] Reached target timers.target - Timer Units.
[  OK  ] Listening on dbus.socket- D-Bus System Message Bus Socket.
[  OK  ] Listening on triggerhappy.socket.
[  OK  ] Reached target sockets.target - Socket Units.
[  OK  ] Reached target basic.target - Basic System.
[  OK  ] Started cron.service -…kground program processing daemon.
         Starting dbus.service - D-Bus System Message Bus...
         Starting e2scrub_reap.serv…e ext4 Metadata Check Snapshots...
         Starting raspi-config.serv…r (unless shift key is pressed)...
         Starting rng-tools-debian.…LSB: rng-tools (Debian variant)...
         Starting rpi-eeprom-update…for Raspberry Pi EEPROM updates...
         Starting rsyslog.service - System Logging Service...
         Starting systemd-logind.se…ice - User Login Management...
[  OK  ] Finished networking.service - Raise network interfaces.
[  OK  ] Started rsyslog.service - System Logging Service.
[  OK  ] Started dbus.service - D-Bus System Message Bus.
[  OK  ] Finished rpi-eeprom-update…k for Raspberry Pi EEPROM updates.
[  OK  ] Started systemd-logind.service - User Login Management.
[  OK  ] Started raspi-config.servi…nor (unless shift key is pressed).
[  OK  ] Reached target network.target - Network.
[  OK  ] Reached target network-online.target - Network is Online.
         Starting exim4.service… LSB: exim Mail Transport Agent...
         Starting rc-local.servicem - /etc/rc.local Compatibility...
         Starting rpc-statd-notify.…- Notify NFS peers of a restart...
         Starting ssh.service - OpenBSD Secure Shell server...
My IP address is 192.168.0.2 
         Starting systemd-user-sess…vice - Permit User Sessions...
[  OK  ] Finished e2scrub_reap.serv…ine ext4 Metadata Check Snapshots.
[  OK  ] Started rng-tools-debian.s…- LSB: rng-tools (Debian variant).
Loading FPGA!
[  OK  ] Started rpc-statd-notify.s…m - Notify NFS peers of a restart.
[   15.392296] rc.local[253]: rmdir: failed to remove '/config/device-tree/overlays/blink': No such file or directory
[  OK  ] Finished systemd-user-sess…ervice - Permit User Sessions.
Loading /dev/i2c-1!
[   16.261972] rc.local[274]: rmdir: failed to remove '/config/device-tree/overlays/i2c1': No such file or directory
[  OK  ] Started ssh.service - OpenBSD Secure Shell server.
[  OK  ] Started exim4.service - LSB: exim Mail Transport Agent.
Mounting home directories!
Done!
[  OK  ] Started rc-local.service - /etc/rc.local Compatibility.
[  OK  ] Started getty@tty1.service - Getty on tty1.
[  OK  ] Started serial-getty@ttyS0…rvice - Serial Getty on ttyS0.
[  OK  ] Reached target getty.target - Login Prompts.
[  OK  ] Reached target multi-user.target - Multi-User System.
[  OK  ] Reached target graphical.target - Graphical Interface.
         Starting systemd-update-ut… Record Runlevel Change in UTMP...
[  OK  ] Finished systemd-update-ut… - Record Runlevel Change in UTMP.

Raspbian GNU/Linux 12 dltdc ttyS0

dltdc login: 

zzz