I maked 40_custom like this:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "FreeBSD" {
insmod bsd
insmod ufs2
set root=(hd0,gpt4)
kfreebsd /boot/loader
}
GRUB2 says bsd.mod and ufs2.mod not found but they’re at /boot/grub2/x86_64-efi/
ls /boot/grub2/x86_64-efi/
acpi.mod cpio_be.mod fshelp.mod halt.mod luks.mod offsetio.mod reiserfs.mod true.mod
adler32.mod cpio.mod fs.lst hashsum.mod lvm.mod ohci.mod relocator.mod udf.mod
affs.mod cpuid.mod functional_test.mod hdparm.mod lzopio.mod part_acorn.mod romfs.mod ufs1_be.mod
afs.mod crc64.mod gcry_arcfour.mod hello.mod macbless.mod part_amiga.mod scsi.mod ufs1.mod
ahci.mod cryptodisk.mod gcry_blowfish.mod help.mod macho.mod part_apple.mod search_fs_file.mod ufs2.mod
all_video.mod crypto.lst gcry_camellia.mod hexdump.mod mdraid09_be.mod part_bsd.mod search_fs_uuid.mod uhci.mod
aout.mod crypto.mod gcry_cast5.mod hfs.mod mdraid09.mod part_dfly.mod search_label.mod usb_keyboard.mod
appleldr.mod cs5536.mod gcry_crc.mod hfspluscomp.mod mdraid1x.mod part_dvh.mod search.mod usb.mod
archelp.mod ctz_test.mod gcry_des.mod hfsplus.mod memdisk.mod part_gpt.mod serial.mod usbms.mod
ata.mod datehook.mod gcry_dsa.mod http.mod memrw.mod partmap.lst setjmp.mod usbserial_common.mod
at_keyboard.mod date.mod gcry_idea.mod iorw.mod minicmd.mod part_msdos.mod setjmp_test.mod usbserial_ftdi.mod
backtrace.mod datetime.mod gcry_md4.mod iso9660.mod minix2_be.mod part_plan.mod setpci.mod usbserial_pl2303.mod
bfs.mod diskfilter.mod gcry_md5.mod jfs.mod minix2.mod part_sun.mod sfs.mod usbserial_usbdebug.mod
bitmap.mod disk.mod gcry_rfc2268.mod jpeg.mod minix3_be.mod part_sunpc.mod shift_test.mod usbtest.mod
bitmap_scale.mod div.mod gcry_rijndael.mod keylayouts.mod minix3.mod parttool.lst signature_test.mod verify.mod
blocklist.mod div_test.mod gcry_rmd160.mod keystatus.mod minix_be.mod parttool.mod sleep.mod video_colors.mod
boot.mod dm_nv.mod gcry_rsa.mod ldm.mod minix.mod password.mod sleep_test.mod video_fb.mod
bsd.mod echo.mod gcry_seed.mod legacycfg.mod mmap.mod password_pbkdf2.mod spkmodem.mod videoinfo.mod
bswap_test.mod efifwsetup.mod gcry_serpent.mod legacy_password_test.mod moddep.lst pata.mod squash4.mod video.lst
btrfs.mod efi_gop.mod gcry_sha1.mod linux16.mod modinfo.sh pbkdf2.mod syslinuxcfg.mod video.mod
bufio.mod efi_netfs.mod gcry_sha256.mod linuxefi.mod morse.mod pbkdf2_test.mod tar.mod videotest_checksum.mod
cat.mod efinet.mod gcry_sha512.mod linux.mod mpi.mod pcidump.mod terminal.lst videotest.mod
cbfs.mod efi_uga.mod gcry_tiger.mod loadbios.mod msdospart.mod play.mod terminal.mod xfs.mod
cbls.mod ehci.mod gcry_twofish.mod load.cfg mul_test.mod png.mod terminfo.mod xnu.mod
cbmemc.mod elf.mod gcry_whirlpool.mod loadenv.mod multiboot2.mod priority_queue.mod test_blockarg.mod xnu_uuid.mod
cbtable.mod eval.mod geli.mod loopback.mod multiboot.mod probe.mod testload.mod xnu_uuid_test.mod
cbtime.mod exfat.mod gettext.mod lsacpi.mod nativedisk.mod procfs.mod test.mod xzio.mod
chain.mod exfctest.mod gfxmenu.mod lsefimmap.mod net.mod progress.mod testspeed.mod zfscrypt.mod
cmdline_cat_test.mod ext2.mod gfxterm_background.mod lsefi.mod newc.mod raid5rec.mod tftp.mod zfsinfo.mod
cmp.mod extcmd.mod gfxterm_menu.mod lsefisystab.mod nilfs2.mod raid6rec.mod tga.mod zfs.mod
cmp_test.mod fat.mod gfxterm.mod lsmmap.mod normal.mod random.mod time.mod
command.lst file.mod gptsync.mod ls.mod ntfscomp.mod read.mod tpm.mod
configfile.mod fixvideo.mod grub.efi lspci.mod ntfs.mod reboot.mod trig.mod
core.efi font.mod gzio.mod lssal.mod odc.mod regexp.mod tr.mod