Largement plus facile que sous Linux à mon sens. ^^
Je m'explique. Les api des bus (pci, usb, autre) et des couches logicielles bas niveau (code réseau générique, code périphérique bloc générique, autre) sont beaucoup plus claires que sous Linux et surtout documentées dans le man. D'autre part tous les drivers pour une fonction donnée (typiquement le réseau) ont la même gueule car ils sont codés par le même groupe de personne. Pour cette partie-là programmer un driver noyau BSD est plus simple que programmer un driver Linux. Après bien sûr pour la partie pilotage du matériel à proprement parler c'est aussi compliqué que partout. Il faut savoir lire des specs et programmer en C. :p
Pour l'intégration dans l'arbre des sources, là aussi, ça se passe mieux que sous Linux. 
Les bonnes façons de faire sont :
— de communiquer sur les mailing lists considérées
— de communiquer avec le core developper du domaine concerné
— de proposer ton code via l'interface de PR : http://www.freebsd.org/cgcgi/query-pr-summary.cgi?query
(Pour info, j'ai déjà fait passé des minis retouches sur uscanner qui ont été intégrées au noyau via les PR)