Could the port be updated, and amended to allow SNP EFI for armv8 please? A number of 64-bit armv8 ampere servers are coming to the FreeBSD Foundation. They can boot using iPXE, cross-built as follows: ``` # on a boring standard ubuntu $ sudo apt-get -y --no-install-recommends install build-essential \ gcc-aarch64-linux-gnu git liblzma-dev $ git clone https://github.com/ipxe/ipxe $ cd ipxe/src $ git log --oneline HEAD -1 1192edf3 (HEAD -> master) [dhcp] Handle DHCPNAK by returning to discovery state $ make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 bin-arm64-efi/snp.efi ``` thanks!
hello there! I plan to split this one in 2 different commits: - update the port itself; - allow building on aarch64. thanks for raising this one! :)
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=e91ecf9b7664d357cf9270b0edc43524957e9777 commit e91ecf9b7664d357cf9270b0edc43524957e9777 Author: VinÃcius Zavam <egypcio@FreeBSD.org> AuthorDate: 2021-04-14 11:11:06 +0000 Commit: VinÃcius Zavam <egypcio@FreeBSD.org> CommitDate: 2021-04-14 11:11:06 +0000 net/ipxe: update g20201129 (13a6d17) to g20210413 (8ca43cc) - https://github.com/ipxe/ipxe/commit/79c0173 Create util/genfsimg for building filesystem-based images Generalise util/geniso, util/gensdsk, and util/genefidsk to create a single script util/genfsimg that can be used to build either FAT filesystem images or ISO images. - https://github.com/ipxe/ipxe/commit/f034ae5 Allow elf2efi.c to build on FreeBSD PR: 254600 Reported by: dch@ net/ipxe/Makefile | 6 +++--- net/ipxe/distinfo | 6 +++--- net/ipxe/files/patch-util_elf2efi.c (gone) | 11 ----------- 3 files changed, 6 insertions(+), 17 deletions(-)
(In reply to Dave Cottlehuber from comment #0) hi, would you mind to check if the latest version of the port builds and works fine with aarch64? that would take me a while to build the env, the port itself and test it all. as soon as we got an OK on that, the new arch can be added.
Created attachment 224127 [details] log thanks for the port update. Right now it fails on arm64 :-( full log attached. ===> Building for ipxe-g20210413,1 install -m 644 /usr/local/share/syslinux/bios/core/isolinux.bin /tmp/usr/ports/net/ipxe/work/ipxe-8ca43cc/src/isolinux.bin gmake[1]: Entering directory '/tmp/usr/ports/net/ipxe/work/ipxe-8ca43cc/src' Makefile.housekeeping:366: arch/aarch64/Makefile: No such file or directory gmake[1]: *** No rule to make target 'arch/aarch64/Makefile', needed by 'bin/deps/libgcc/__divdi3.c.d'. Stop. gmake[1]: Leaving directory '/tmp/usr/ports/net/ipxe/work/ipxe-8ca43cc/src' *** Error code 1 this might be just a sed change for target name, perhaps?
(In reply to Dave Cottlehuber from comment #4) ACK. many thanks for the feedback! very appreciated. it's on my watch now.
egypcio, this works for building from src: - git clone ... && cd ipxe/src - install gcc, binutils && related dependencies same as port - build using binutils ld/objcopy etc not the ones from /usr/bin/ $ export PATH=/usr/local/bin:$PATH $ gmake ARCH=arm64 \ bin-arm64-efi/snp.efi \ bin-arm64-efi/ipxe.efi the native "ipxe.efi" version doesn't boot for me here; I get an exception on startup, but it may work for others. iPXE 1.21.1+ (g3efd) -- Open Source Network Boot Firmware -- http://ipxe.org
BTW ref https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216316 for the reason why freebsd's own objcopy etc aren't suitable for building ipxe.
thanks for sharing that! it's gonna take a while here for me to (cross)compile and test it all, but I am giving it quite an attention. hope it works :) you should hear from me soon.
hello there! as I do see the importance of getting us ipxe to work on aarch64, I am getting back to you again... sadly just to report I am still "building" a few packages here on my test lab. - luckly I was able to install few pre-built packages with an extra help of our recent Tier1 repo, but there are still some that must be build (and tested). we "just need to" (tm) patch the port's Makefile to get the proper replacement of aarch64/arm64 in place; or generate a patch for that under files/. it "should work" (tm) - testing lab env follows; # uname ... FreeBSD 14.0-CURRENT 1400008 # poudriere jail ... 12aarch64 12.2-STABLE arm64.aarch64 url=https://artifact.ci.freebsd.org/snapshot/12.2-STABLE/f11b9574cd186762c4883e8819896c6475be3027/arm64/aarch64 last pid: 3978; load averages: 1.14, 1.12, 1.08; battery: 100% up 3+22:54:44 11:26:16 CTRL+t load: 1.12 cmd: qemu-aarch64-static 3976 [running] 105.44r 105.13u 0.32s 100% 219512k make[1]: Working in: /usr/ports/lang/gcc10 make: Working in: /usr/ports/net/ipxe
let's see where it goes now. and thanks for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216316 ! I admit that almost did not see what you shared before. root@tak-poudriere:/usr/ports # make -s -DBATCH -DFORCE_PKG_REGISTER -C net/ipxe clean ===> Cleaning for ipxe-g20210414,1 root@tak-poudriere:/usr/ports # make -s -DBATCH -DFORCE_PKG_REGISTER -C net/ipxe all ===> License GPLv2 accepted by the user ===> ipxe-g20210414,1 depends on file: /usr/local/sbin/pkg - found ===> Fetching all distfiles required by ipxe-g20210414,1 for building ===> Extracting for ipxe-g20210414,1 => SHA256 Checksum OK for ipxe-ipxe-g20210414-85d179f_GH0.tar.gz. ===> Patching for ipxe-g20210414,1 ===> ipxe-g20210414,1 depends on executable: bash - found ===> ipxe-g20210414,1 depends on executable: mformat - found ===> ipxe-g20210414,1 depends on file: /usr/local/share/syslinux/bios/core/isolinux.bin - found ===> ipxe-g20210414,1 depends on executable: bash - found ===> ipxe-g20210414,1 depends on executable: mkisofs - found ===> ipxe-g20210414,1 depends on package: gmake>=4.3 - found ===> ipxe-g20210414,1 depends on executable: gcc10 - found ===> ipxe-g20210414,1 depends on file: /usr/local/bin/as - found ===> ipxe-g20210414,1 depends on package: perl5>=5.32.r0<5.33 - found ===> Configuring for ipxe-g20210414,1 ===> Building for ipxe-g20210414,1 [DEPS] arch/arm64/core/setjmp.S [DEPS] drivers/net/ath/ath9k/ath9k_xmit.c [DEPS] drivers/net/ath/ath9k/ath9k_recv.c [DEPS] drivers/net/ath/ath9k/ath9k_main.c [DEPS] drivers/net/ath/ath9k/ath9k_mac.c [DEPS] drivers/net/ath/ath9k/ath9k_init.c [DEPS] drivers/net/ath/ath9k/ath9k_hw.c [DEPS] drivers/net/ath/ath9k/ath9k_eeprom_def.c [DEPS] drivers/net/ath/ath9k/ath9k_eeprom_9287.c [DEPS] drivers/net/ath/ath9k/ath9k_eeprom_4k.c [DEPS] drivers/net/ath/ath9k/ath9k_eeprom.c [DEPS] drivers/net/ath/ath9k/ath9k_common.c [DEPS] drivers/net/ath/ath9k/ath9k_calib.c [DEPS] drivers/net/ath/ath9k/ath9k_ar9003_phy.c [DEPS] drivers/net/ath/ath9k/ath9k_ar9003_mac.c ...
Created attachment 224477 [details] [PATCH] net/ipxe: enable aarch64 (arm64) I am adding the (not-so-final-version-and-WIP) patch that made it fly on aarch64 here.
FYI: cleared all my previous jail (which was running 12), and restarting it all using 13.
/usr/local/bin/ar: creating bin/blib.a /usr/local/bin/ld: bin/blib.a(serial.o): in function `serial_init': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/serial.c:145: undefined reference to `uart_select' /usr/local/bin/ld: bin/blib.a(serial.o): in function `uart_data_ready': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/include/ipxe/uart.h:112: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/include/ipxe/uart.h:112: undefined reference to `uart_read' /usr/local/bin/ld: bin/blib.a(serial.o): in function `uart_receive': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/include/ipxe/uart.h:124: undefined reference to `uart_read' /usr/local/bin/ld: bin/blib.a(uart.o): in function `uart_transmit': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:54: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:61: undefined reference to `uart_write' /usr/local/bin/ld: bin/blib.a(uart.o): in function `uart_flush': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:75: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:76: undefined reference to `uart_read' /usr/local/bin/ld: bin/blib.a(uart.o): in function `uart_exists': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:95: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:96: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:98: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:99: undefined reference to `uart_read' /usr/local/bin/ld: bin/blib.a(uart.o): in function `uart_init': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:124: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:126: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:131: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:132: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:138: undefined reference to `uart_write' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:141: undefined reference to `uart_write' /usr/local/bin/ld: bin/blib.a(uart.o):/wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:144: more undefined references to `uart_write' follow /usr/local/bin/ld: bin/blib.a(uart.o): in function `uart_init': /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:134: undefined reference to `uart_read' /usr/local/bin/ld: /wrkdirs/usr/ports/net/ipxe/work/ipxe-106f4c5/src/core/uart.c:135: undefined reference to `uart_read' /usr/local/bin/ld: bin/ipxe.efi.tmp: hidden symbol `uart_read' isn't defined /usr/local/bin/ld: final link failed: bad value gmake[1]: *** [Makefile.housekeeping:1219: bin/ipxe.efi.tmp] Error 1 *** Error code 1
Created attachment 225321 [details] [PATCH] net/ipxe: enable aarch64 (arm64) updating current patch (WIP); poudriere log to be added.
file's size did not fit the limits of bugzilla, so: * 13aarch64-git/latest-per-pkg/ipxe-g20210521,1.log + https://share.riseup.net/#uEWYJraRc_LXHrLUiW2Qtw
Created attachment 233434 [details] [PATCH] net/ipxe: enable aarch64 (arm64) support updated git patch; WIP still. as I lost native aarch64 support for testing, and using poudriere jails is not working... that must be build in some actual board running FreeBSD on arm64. build log: https://share.riseup.net/#F9iowU9cjHM_u-wvwN7mnQ > "Fatal error 'Cannot allocate red zone for initial thread' at line 394 in file /usr/src/lib/libthr/thread/thr_init.c (errno = 4294963200)" host == 14.0-CURRENT #11 main-n254858-a812a5cacbe0: GENERIC-NODEBUG amd64