firmware building basics