FreeBSD on the AP121 (AR9330)

Warner Losh imp at bsdimp.com
Thu Mar 28 03:22:35 UTC 2013


> -r-xr-xr-x  1 adrian  wheel   4638057 Mar 27 17:34 /tftpboot/kernel.AP121
> 
> http://people.freebsd.org/~adrian/ath/AP121-nodebug.txt
> 
> Yes, it's bigger without -g.

I was able to save about 40k by uninlining mutexes, etc. But that took the AP96 kernel from 6.5MB to 6.4MB.

4680311	 266388	1576752	6523451	 638a3b	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/kernel
4641469	 266372	1576624	6484465	 62f1f1	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/kernel

svn diff sys/mips/conf
Index: sys/mips/conf/AP96
===================================================================
--- sys/mips/conf/AP96	(revision 248804)
+++ sys/mips/conf/AP96	(working copy)
@@ -43,3 +43,11 @@
 
 device		etherswitch
 device		arswitch
+
+# Disable the inlining of mutex, rwlock and sx locks.  These eat up a lot
+# of space.
+options 	MUTEX_NOINLINE
+options 	RWLOCK_NOINLINE
+options 	SX_NOINLINE
+options 	NO_FFS_SNAPSHOT
+options 	NO_SWAPPING


Here's the top 10 in terms of text size:

  57344	    160	  49184	 106688	  1a0c0	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/kern_umtx.o
  57004	    848	     64	  57916	   e23c	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/pci.o
  48956	  10672	     80	  59708	   e93c	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/scsi_all.o
  48664	   1680	    256	  50600	   c5a8	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/vfs_subr.o
  45156	    624	      0	  45780	   b2d4	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/if_ath.o
  44932	   2000	    320	  47252	   b894	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/vfs_bio.o
  41796	    992	    192	  42980	   a7e4	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/ffs_alloc.o
  41376	      0	      0	  41376	   a1a0	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/if_ath_tx.o
  38272	   5120	     80	  43472	   a9d0	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/kern_jail.o
  34340	    752	    192	  35284	   89d4	/dune/imp/obj/mips.mips/dune/imp/FreeBSD/sys/AP96/cam_xpt.o

two of which you might be able to do something about. One suspects that PCIe support could be compiled out of pci.o, and there's two from CAM, and another three from file systems... Maybe there's a smaller subset of CAM that can be compiled in for the USB drive support?

Last time I fought this battle, it was a battle of attrition: 20k here, 20k there, 5k over there. Sadly, you'll need about 100 of these.  Also, inlining can cause significant bloat, and we inline a lot...

Warner



More information about the freebsd-embedded mailing list