[video member=miotatsu stream_platform=twitch project=riscy medium=research title="Playing with a Fedora chroot & Ion on the HiFive Unleashed" vod_platform=youtube id=AHH-KfjJn_s annotator=Miblo] [0:13][Begin to recap and set the stage for the day][:speech] [0:17][@riskyfive][\\o/] [0:39][@riskyfive][Hmm, I can't see my own text] [1:19][@riscyfive][Ah, any feedback on the podcast? Boring? Confusing?] [4:28][Plug @riscyfive's podcast 'Why So Anemic'[ref site="Twitter: @coredumppodcast" page="Episode 1: Why So Anemic?" url=https://twitter.com/coredumppodcast/status/985931647437672448]] [4:42][@riskyfive][Well, I want(ed) to keep my mind open. If I had found out (or I later find out) that the OOP-style modeling was the best option then so be it. I just want to get at the truth, I don't have a camp] [5:30][@riskyfive][People at DConf 2016 thought I was Italian, due to the way I talk] [6:11][Determine to continue doing stuff with the HiFive Unleashed, noting the possibility from the SiFive Forums to install Fedora[ref site="SiFive Forums" page="Is there a more complete system image for Unleashed board?" url=https://forums.sifive.com/t/is-there-a-more-complete-system-image-for-unleashed-board/1146]] [10:49][Explain the process of installing Fedora onto the HiFive Unleashed,[ref site="Fedora Project Wiki" page="Architectures/RISC-V" url=https://fedoraproject.org/wiki/Architectures/RISC-V] noting the block size in Arch Linux's example dd invocation[ref site="Arch Wiki" page="USB flash installation media" url=https://wiki.archlinux.org/index.php/USB_flash_installation_media#In_GNU.2FLinux]] [15:42][@riskyfive][By the way, you probably don't have video on your RISC-V system. SiFive used an adapter FPGA board for their demo. I wanted to share with you and your viewers that you can buy the Nexys Video (the bigger one recommended for ~Bitwise) using an academic discount. I ordered one. We can then later collaborate to get HDMI output using one, or something like that. I can help you with that] [17:02][Continue to explain the dd part of the installation process] [17:44][@riskyfive][You can even add MP4 encoding in the FPGA itself. No need for OBS] [18:38][Continue to explain the installation process] [19:08][@riskyfive][You need more Patreons. I'll try to promote you[ref site=Patreon page="miotatsu is creating RISCY BUSINESS" url=https://www.patreon.com/miotatsu][ref site=Gumroad page="RISCY BUSINESS: Programming a handmade tool-chain for RISC-V live on Twitch" url=https://gumroad.com/riscy]] [20:49][Finish up explaining the setup process, including building the Ion compiler from ~bitwise and having it run out of the box!] [23:00][Don the antistatic wristband and plug in the HiFive Unleashed][:admin] [24:03][@riskyfive][Where are you plugging the band?] [25:03][@riskyfive][The "duct tape" method. Good engineering] [25:23][Read 5.3. Knobs on the HiFive Unleashed[ref site="SiFive Developers" page="HiFive Unleashed Getting Started Guide" url=https://www.sifive.com/documentation/boards/hifive-unleashed/hifive-unleashed-getting-started-guide/]] [27:02][@riskyfive][I've worked with $5K boards at Siemens without grounding and they never exhibited problems. After that I never cared too much] [28:47][@riskyfive][That actually was very surprising because I kept getting shocked due to the static discharges at that laboratory (when touching the server racks). But the hardware itself never complained] [30:25][@riskyfive][No, there was a ground. But we were busy and lazy! Maybe that was the trick: I kept discharging myself unintentionally!] [30:42][Plug in and power up the board][:admin] [31:53][@riskyfive][Yeah, I pretty much only have grounded plugs in the kitchen] [32:18][Connect to the HiFive Unleashed and setup the environment][:admin] [36:45][@riskyfive][It seems the cool kids use tmux these days] [37:09][Delete our test files related to ion][:admin] [40:01][@riskyfive][Try: $ shopt | grep checkwinsize] [41:05][Compile ion, :run generate_test.py, show the resulting Ion code in test3.ion, run ion on that file to produce test3.c, and compile that test3.c with gcc] [43:54][Point out that qemu[ref site=QEMU url=https://www.qemu.org/] may provide the closest means to follow along, without having to invest in a HiFive Unleashed][:speech] [45:30][Try to :run ion on test2.ion and then gcc on the resulting test2.c file] [46:54][Try to :run ion on test1.ion and then gcc on the resulting test1.c file, to see printouts and input totally working][:"input handling"] [48:39][Read through test1.ion] [51:45][:Run test1 to provide the first demo of Ion code compiled to and running on RISC-V] [52:50][Note @Miblo's thought to use readelf while he wrote annotations for ~Bitwise][:speech] [55:12][:Run objdump on test2] [55:44][Determine to run objdump on hello][:speech] [56:51][@riskyfive][I use readelf all the time for my empire RISC-V port] [57:03][Continue to figure out how to unfreeze the screen][:admin] [57:57][@riskyfive][Ctrl-q?] [58:21][Note the annoyance of the XOFF ASCII character and screen's default keybinding for it][:rant] [59:39][@riskyfive][Yeah, very annoying. Arguably it's just it not ignoring the ASCII characters (XON / XOFF) that you actually typed] [1:00:30][Copy hello into the (Fedora) chroot environment][:admin] [1:01:06][@riskyfive][Yeah, but when you type Ctrl-something it emits certain ASCII characters that are control characters, like stop transmitting (freeze)] [1:03:35][:Run objdump on our elf64-littleriscv hello] [1:04:50][Consider trying the hula RISC-V "Hello, world!" on our HiFive Unleashed[ref site=GitHub page="riscy-business / hula" url=https://github.com/riscy-business/hula]] [1:05:37][@riskyfive][That's just what the ASCII character 19 means: stop transmitting. And when you type Ctrl-s you type that character. The real question is, who thought it was a good idea to transmit control information in-band with the content. That is, if you cat a .txt file that contains that character you're screwed] [1:07:14][@riskyfive][You see, it used to be that terminals had dedicated wires for control. But then $ happened] [1:07:31][:Rant on screen having kept legacy baggage around] [1:09:31][Continue to compare the objdump of hello with hula[ref site=GitHub page="riscy-business / hula" url=https://github.com/riscy-business/hula]] [1:10:02][@riskyfive][With dedicated wires you don't need in-band control characters] [1:10:43][@riskyfive][No, there was a message missing in between] [1:10:52][Compare hula's "write" code with the hello objdump] [1:11:55][@riskyfive][The Ctrl-z was an example of how the shell has the same problem] [1:13:11][Note that the hello objdump may not show scall] [1:14:08][@riskyfive][I agree it's braindead. But just think this: the initial Ctrl-a just means that you want the sequence Ctrl-a q to pass as a Ctrl-q to the target process. It's not a list of Ctrl-a commands, it just a generic escape] [1:14:34][@riskyfive][scall -> ecall] [1:15:14][@riskyfive][It's the old name] [1:15:16][Wonder if the objdump is not using system calls, and that it's a lot bigger than hula] [1:16:19][@riskyfive][Notice: disassembly of XXX (not .text) section] [1:16:42][Hunt for a7 in the objdump because that is where you put the syscall number in RISC-V] [1:18:11][@riskyfive][You can do a readelf of the binary in your main system] [1:18:27][Consult man readelf] [1:19:25][:Run readelf -a hello] [1:20:21][Read through the readelf of hello] [1:21:40][@riskyfive][Maybe just try GDB with the binary?] [1:22:13][Continue to read through the readelf of hello] [1:22:31][@riskyfive][That's why you need the JTAG port] [1:22:46][Return to the objdump of hello] [1:23:42][@riskyfive][The system calls are probably wrapped in libc functions] [1:23:55][Notice the mentions of "libc" in the hello objdump] [1:24:49][@riskyfive][I think the ligc_start_main is just a red herring. Notice the offset is different between different __libc_start_main lines] [1:25:58][Notice "libc_start_main" in the hello objdump] [1:27:59][Consult the objdump of test1, to see that its symbols are correctly resolved] [1:30:39][Call it a day][:speech] [/video]