PfSense 2.2.2 on a soekris net4801
I have been working on getting pfSense 2.2.2 (i386 nanobsd) running on a surplus soekris net4801. I was going to post a question but, I figured it out while waiting for the forums here to be fixed. I thought I would share this, in case it helps anyone else.
The first issue I ran into was with terminal speeds. Most stuff talking about the net4801 suggests using 9600 baud for the serial console. However, newer releases of pfSense use 115200. That gets set in the net4801 BIOS.
POST: 012345689bcefghipsajklnopqr,,,tvwxy comBIOS ver. 1.33 20080103 Copyright (C) 2000-2007 Soekris Engineering. net4801 ... comBIOS Monitor. Press ? for help. > show ConSpeed = 115200 ConLock = Enabled ConMute = Disabled BIOSentry = Enabled PCIROMS = Enabled PXEBoot = Disabled FLASH = Primary BootDelay = 5 FastBoot = Disabled BootPartition = Disabled BootDrive = 80 81 F0 FF ShowPCI = Enabled Reset = Hard CpuSpeed = Default
After getting that situated, I ran into a problem during boot where it would stall:
random: unblocking device. (ada0:ata0:0:0:0): READ_DMA. ACB: c8 00 1e fc 3d 40 00 00 00 00 01 00 (ada0:ata0:0:0:0): CAM status: Command timeout (ada0:ata0:0:0:0): Retrying command ... (ada0:ata0:0:0:0): READ_DMA. ACB: c8 00 1e fc 3d 40 00 00 00 00 01 00 (ada0:ata0:0:0:0): CAM status: Command timeout (ada0:ata0:0:0:0): Error 5, Retries exhausted
I got past this by disabling DMA. After the kernel loads, you can interrupt the boot sequence and, use a set command to disable DMA for the current boot:
Hit [Enter] to boot immediately, or any other key for command prompt. Booting [/boot/kernel/kernel] in 3 seconds... Type '?' for a list of commands, 'help' for more detailed help. OK set hw.ata.ata_dma=0 OK boot Booting...
Of course, it would be super inconvenient to have to do this via serial console on every boot. So, it needs to be added to /boot/loader.conf.
On the way there, one can configure the network interfaces. They are, from right (just after the serial port) to left:
sis0: labeled eth0 on the case
sis1: labeled eth1 on the case
sis2: labeled eth2 on the case
Once you get to the pfSense menu, choose option 8 to get a shell. /boot is mounted read-only. So, we need to remount it:
Then, add the appropriate line to /boot/loader.conf:
[2.2.2-RELEASE][root@pfSense.localdomain]/root: echo 'hw.ata.ata_dma="0"' >>/boot/loader.conf [2.2.2-RELEASE][root@pfSense.localdomain]/root: cat /boot/loader.conf loader_color="NO" console=comconsole autoboot_delay="5" beastie_disable="YES" vm.kmem_size="435544320" vm.kmem_size_max="535544320" hw.usb.no_pf="1" hw.ata.ata_dma="0"
Remount the file system read-only when you are done and, exit back to the menu:
[2.2.2-RELEASE][root@pfSense.localdomain]/root: /etc/rc.conf_mount_ro [2.2.2-RELEASE][root@pfSense.localdomain]/root: exit
Anything else I should be doing with this? Reply and let me know!
Hmm, I'm surprised that worked because in 2.2 the method for disabling it has changed. See:
You may want to use that instead as that's the correct method in FreeBSD 10+
Interesting. The "pfSense 2.2 and later" settings do not work for me on the soekris net4801 with pfSense 2.2.2. After entering "set kern.cam.ada.write_cache=0" at the boot loader prompt, it locks up just as it did originally.
You may not need the write cache disabling. Does the dma setting work by itself?
"hw.ata.ata_dma=0" works by itself. Is there some newer variant of that? I tried "kern.cam.ada.dma=0" and several variants of that, to no avail.
Yes, just like it shows in that link. Instead of disabling DMA you set PIO mode:
Which of course does disable DMA.
My apologies: I should have read more carefully. I just jumped down to the "Disable Write Caching" section. I think I have documentation fatigue today.
Yes, hint.ata.0.mode=PIO4 works in place of hw.ata.ata_dma=0 and, it boots fine.