diff --git a/aos/linux_code/README.txt b/aos/linux_code/README.txt
index 143cefb..65feb21 100644
--- a/aos/linux_code/README.txt
+++ b/aos/linux_code/README.txt
@@ -1,9 +1,9 @@
-see ../README.txt for stuff affecting crio and linux code
+see ../README.txt for stuff affecting all code
 
 The folder is called linux_code because it mainly deals with code that uses the queue system, which only works under GNU/Linux for a variety of reasons, some fundamental (futexes) and some because nobody bothers to fix them.
 The layout is designed with multiple linux boxes in mind.
 
-The code for the linux box that talks the cRIO etc is in ../prime/.
+The code for the linux box that sends motor outputs etc is in ../prime/.
 
 [NOTES]
 Any code should call aos::Init() (or aos::InitNRT() for processes that don't need to be realtime) before making any calls to any of the aos functions.
diff --git a/aos/linux_code/starter/netconsole.cc b/aos/linux_code/starter/netconsole.cc
deleted file mode 100644
index c4ca5b9..0000000
--- a/aos/linux_code/starter/netconsole.cc
+++ /dev/null
@@ -1,233 +0,0 @@
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <sys/stat.h>
-
-#include "aos/common/logging/logging_impl.h"
-#include "aos/common/util/inet_addr.h"
-#include "aos/linux_code/configuration.h"
-#include "aos/common/network_port.h"
-#include "aos/linux_code/init.h"
-#include "aos/common/byteorder.h"
-
-namespace aos {
-namespace {
-
-struct FDsToCopy {
-  const int input;
-  const int output;
-
-  const struct sockaddr_in *const interface_address;
-  const struct sockaddr_in *const source_address;
-};
-
-void *FDCopyThread(void *to_copy_in) {
-  FDsToCopy *to_copy = static_cast<FDsToCopy *>(to_copy_in);
-
-  char buffer[32768];
-  ssize_t position = 0;
-  while (true) {
-    CHECK_GE(position, 0);
-    CHECK_LE(position, static_cast<ssize_t>(sizeof(buffer)));
-    if (position != sizeof(buffer)) {
-      ssize_t read_bytes;
-      bool good_data = true;
-      if (to_copy->interface_address != nullptr ||
-          to_copy->source_address != nullptr) {
-        char control_buffer[0x100];
-        struct msghdr header;
-        memset(static_cast<void *>(&header), 0, sizeof(header));
-        header.msg_control = control_buffer;
-        header.msg_controllen = sizeof(control_buffer);
-        struct iovec iovecs[1];
-        iovecs[0].iov_base = buffer + position;
-        iovecs[0].iov_len = sizeof(buffer) - position;
-        header.msg_iov = iovecs;
-        header.msg_iovlen = sizeof(iovecs) / sizeof(iovecs[0]);
-        struct sockaddr_in sender_address;
-        header.msg_name = &sender_address;
-        header.msg_namelen = sizeof(sender_address);
-
-        read_bytes = recvmsg(to_copy->input, &header, 0);
-        if (read_bytes != -1) {
-          if (to_copy->interface_address != nullptr) {
-            for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&header);
-                 cmsg != NULL;
-                 cmsg = CMSG_NXTHDR(&header, cmsg)) {
-              if (cmsg->cmsg_level == IPPROTO_IP &&
-                  cmsg->cmsg_type == IP_PKTINFO) {
-                unsigned char *data = CMSG_DATA(cmsg);
-                struct in_pktinfo *pktinfo;
-                memcpy(&pktinfo, &data, sizeof(void *));
-                if (pktinfo->ipi_spec_dst.s_addr !=
-                    to_copy->interface_address->sin_addr.s_addr) {
-                  good_data = false;
-                }
-              }
-            }
-          }
-          if (to_copy->source_address != nullptr) {
-            CHECK_GE(header.msg_namelen, sizeof(struct sockaddr_in));
-            if (to_copy->source_address->sin_port != hton<uint16_t>(0)) {
-              if (sender_address.sin_port !=
-                  to_copy->source_address->sin_port) {
-                good_data = false;
-              }
-            }
-            if (sender_address.sin_addr.s_addr !=
-                to_copy->source_address->sin_addr.s_addr) {
-              good_data = false;
-            }
-          }
-        }
-      } else {
-        read_bytes = read(to_copy->input,
-                          buffer + position, sizeof(buffer) - position);
-      }
-      if (read_bytes == -1) {
-        if (errno != EINTR) {
-          PLOG(FATAL, "read(%d, %p, %zd) failed",
-               to_copy->input, buffer + position, position - sizeof(buffer));
-        }
-      } else if (read_bytes == 0 && to_copy->interface_address == NULL) {
-        // read(2) says that this means EOF
-        return NULL;
-      }
-      if (good_data) {
-        position += read_bytes;
-      }
-    }
-
-    CHECK_GE(position, 0);
-    CHECK_LE(position, static_cast<ssize_t>(sizeof(buffer)));
-    if (position > 0) {
-      ssize_t sent_bytes = write(to_copy->output, buffer, position);
-      if (sent_bytes == -1) {
-        if (errno != EINTR) {
-          PLOG(FATAL, "write(%d, %p, %zd) failed",
-               to_copy->output, buffer, position);
-        }
-      } else if (sent_bytes != 0) {
-        if (sent_bytes == position) {
-          position = 0;
-        } else {
-          memmove(buffer, buffer + sent_bytes, position - sent_bytes);
-          position -= sent_bytes;
-        }
-      }
-    }
-  }
-}
-
-int NetconsoleMain(int argc, char **argv) {
-  WriteCoreDumps();
-  logging::Init();
-  logging::AddImplementation(new logging::StreamLogImplementation(stdout));
-
-  int input, output;
-  if (argc > 1) {
-    output = open(argv[1], O_APPEND | O_CREAT | O_WRONLY | O_TRUNC, 0666);
-    if (output == -1) {
-      if (errno == EACCES || errno == ELOOP || errno == ENOSPC ||
-          errno == ENOTDIR || errno == EROFS || errno == ETXTBSY) {
-        PLOG(FATAL, "opening output file '%s' failed", argv[1]);
-      }
-      PLOG(FATAL, "open('%s', stuff, 0644) failed", argv[1]);
-    }
-    fprintf(stderr, "Writing output to '%s'.\n", argv[1]);
-    input = -1;
-    fprintf(stderr, "Not taking any input.\n");
-  } else {
-    output = STDOUT_FILENO;
-    fprintf(stderr, "Writing output to stdout.\n");
-    input = STDIN_FILENO;
-    fprintf(stderr, "Reading stdin.\n");
-  }
-
-  int on = 1;
-
-  int from_crio = socket(AF_INET, SOCK_DGRAM, 0);
-  if (from_crio == -1) {
-    PLOG(FATAL, "socket(AF_INET, SOCK_DGRAM, 0) failed");
-  }
-  if (setsockopt(from_crio, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
-    PLOG(FATAL, "SOL_SOCKET::SO_REUSEADDR=%d(%d) failed", on, from_crio);
-  }
-  if (setsockopt(from_crio, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1) {
-    PLOG(FATAL, "SOL_SOCKET::SO_BROADCAST=%d(%d) failed", on, from_crio);
-  }
-  if (setsockopt(from_crio, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on)) == -1) {
-    PLOG(FATAL, "IPROTO_IP::IP_PKTINFO=%d(%d) failed", on, from_crio);
-  }
-  union {
-    struct sockaddr_in in;
-    struct sockaddr addr;
-  } address, crio_address;
-
-  address.in.sin_family = AF_INET;
-  address.in.sin_port = hton<uint16_t>(6666);
-  address.in.sin_addr.s_addr = INADDR_ANY;
-
-  crio_address.in.sin_family = AF_INET;
-  crio_address.in.sin_port = hton<uint16_t>(0);
-  crio_address.in.sin_addr = ::aos::configuration::GetOwnIPAddress();
-  ::aos::util::SetLastSegment(&crio_address.in.sin_addr,
-                              ::aos::NetworkAddress::kCRIO);
-
-  if (bind(from_crio, &address.addr, sizeof(address)) == -1) {
-    PLOG(FATAL, "bind(%d, %p, %zu) failed",
-         from_crio, &address.addr, sizeof(address));
-  }
-
-  pthread_t input_thread, output_thread;
-
-  address.in.sin_addr = ::aos::configuration::GetOwnIPAddress();
-  ::aos::util::SetLastSegment(&address.in.sin_addr, NetworkAddress::kCRIO);
-  fprintf(stderr, "Using cRIO IP %s.\n",
-          inet_ntoa(address.in.sin_addr));
-
-  if (input != -1) {
-    int to_crio = socket(AF_INET, SOCK_DGRAM, 0);
-    if (to_crio == -1) {
-      PLOG(FATAL, "socket(AF_INET, SOCK_DGRAM, 0) failed");
-    }
-    if (setsockopt(to_crio, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
-      PLOG(FATAL, "SOL_SOCKET::SO_REUSEADDR=%d(%d) failed", on, to_crio);
-    }
-    address.in.sin_port = hton<uint16_t>(6668);
-    if (connect(to_crio, &address.addr, sizeof(address)) == -1) {
-      PLOG(FATAL, "connect(%d, %p, %zu) failed",
-           to_crio, &address.addr, sizeof(address));
-    }
-    FDsToCopy input_fds{input, to_crio, nullptr, nullptr};
-    if (pthread_create(&input_thread, NULL, FDCopyThread, &input_fds) == -1) {
-      PLOG(FATAL, "pthread_create(%p, NULL, %p, %p) failed",
-           &input_thread, FDCopyThread, &input_fds);
-    }
-  }
-
-  address.in.sin_addr = ::aos::configuration::GetOwnIPAddress();
-  FDsToCopy output_fds{from_crio, output, &address.in, &crio_address.in};
-  if (pthread_create(&output_thread, NULL, FDCopyThread, &output_fds) == -1) {
-    PLOG(FATAL, "pthread_create(%p, NULL, %p, %p) failed",
-         &output_thread, FDCopyThread, &output_fds);
-  }
-
-  // input_thread will finish when stdin gets an EOF
-  if (pthread_join((input == -1) ? output_thread : input_thread, NULL) == -1) {
-    PLOG(FATAL, "pthread_join(a_thread, NULL) failed");
-  }
-  exit(EXIT_SUCCESS);
-}
-
-}  // namespace
-}  // namespace aos
-
-int main(int argc, char **argv) {
-  return ::aos::NetconsoleMain(argc, argv);
-}
diff --git a/aos/linux_code/starter/starter.gyp b/aos/linux_code/starter/starter.gyp
index ee8c9ab..9a16647 100644
--- a/aos/linux_code/starter/starter.gyp
+++ b/aos/linux_code/starter/starter.gyp
@@ -1,19 +1,6 @@
 {
   'targets': [
     {
-      'target_name': 'netconsole',
-      'type': 'executable',
-      'sources': [
-        'netconsole.cc',
-      ],
-      'dependencies': [
-        '<(AOS)/build/aos.gyp:logging',
-        '<(AOS)/linux_code/linux_code.gyp:configuration',
-        '<(AOS)/common/util/util.gyp:inet_addr',
-        '<(AOS)/linux_code/linux_code.gyp:init',
-      ],
-    },
-    {
       'target_name': 'starter_exe',
       'type': 'executable',
       'sources': [
@@ -32,19 +19,8 @@
         {
           'destination': '<(rsync_dir)',
           'files': [
-            'starter_loop.sh',
+            'starter.sh',
           ],
-          'conditions': [
-            ['FULL_COMPILER=="gcc_frc"', {
-              'files': [
-                'starter_roborio.sh',
-              ],
-            }, {
-              'files': [
-                'starter.sh',
-              ],
-            }
-          ]],
         },
       ],
     },
diff --git a/aos/linux_code/starter/starter.sh b/aos/linux_code/starter/starter.sh
index 7bdf606..d2a0ae1 100755
--- a/aos/linux_code/starter/starter.sh
+++ b/aos/linux_code/starter/starter.sh
@@ -1,36 +1,7 @@
 #!/bin/bash
 
-echo '/home/driver/tmp/robot_logs/%e-%s-%p-%t.coredump' > /proc/sys/kernel/core_pattern
+# NI already has a core pattern, so we probably shouldn't change it.
+#echo '/home/driver/tmp/robot_logs/%e-%s-%p-%t.coredump' > /proc/sys/kernel/core_pattern
 
-chrt -o 0 bash -c "export PATH=$PATH:/home/driver/robot_code/bin; starter_loop.sh $*" &
-STARTER_LOOP_PID=$!
-echo Starter is ${STARTER_LOOP_PID}.
-#chrt -o 0 bash -c "while true; do cd /home/driver/mjpg-streamer2; ./server.sh; sleep 5; done" &
-
-# Log everything from the serial port...
-#SERIAL_LOG_FILE=$(date "/home/driver/tmp/robot_logs/serial_log.%F_%H-%M-%S")
-#chrt -o 0 bash -c "( stty -echo -echoe -echok 9600; cat > ${SERIAL_LOG_FILE} ) < /dev/ttyUSB0" &
-
-# Wireshark _everything_ we can see...
-#DUMPCAP_LOG_FILE=$(date "/home/driver/tmp/robot_logs/dumpcap.%F_%H-%M-%S")
-#DUMPCAP_STDOUT_FILE=$(date "/home/driver/tmp/robot_logs/stdout_dumpcap.%F_%H-%M-%S")
-#chrt -o 0 bash -c "dumpcap -i eth0 -w ${DUMPCAP_LOG_FILE} -f 'not port 8080 and not net 10.9.71.13' > ${DUMPCAP_STDOUT_FILE}" &
-
-# Run netconsole to record what the cRIO sends.
-chrt -o 0 bash -c '
-NETCONSOLE_BASE=/home/driver/tmp/robot_logs/netconsole-
-existing=$(ls ${NETCONSOLE_BASE}*)
-if [[ $? -eq 0 ]]; then
-	i=$(echo ${existing} | sed "s,${NETCONSOLE_BASE},,g; s/ /\n/g" | sort -g | tail -n1)
-else
-	i=0
-fi
-while true; do
-	/home/driver/robot_code/bin/netconsole ${NETCONSOLE_BASE}$((++i))
-	sleep 1
-done
-' &
-NETCONSOLE_PID=$!
-echo Netconsole is ${NETCONSOLE_PID}.
-
-echo $$ > /tmp/starter.pid
+export PATH=$PATH:/home/admin/robot_code
+exec starter_loop.sh "$@"
diff --git a/aos/linux_code/starter/starter_loop.sh b/aos/linux_code/starter/starter_loop.sh
deleted file mode 100755
index 83d34cc..0000000
--- a/aos/linux_code/starter/starter_loop.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-for ((i=1; 1; i++)); do
-	starter_exe $* 1>/tmp/starter${i}_stdout 2>/tmp/starter${i}_stderr
-	sleep 2
-done
diff --git a/aos/linux_code/starter/starter_roborio.sh b/aos/linux_code/starter/starter_roborio.sh
deleted file mode 100755
index d2a0ae1..0000000
--- a/aos/linux_code/starter/starter_roborio.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-# NI already has a core pattern, so we probably shouldn't change it.
-#echo '/home/driver/tmp/robot_logs/%e-%s-%p-%t.coredump' > /proc/sys/kernel/core_pattern
-
-export PATH=$PATH:/home/admin/robot_code
-exec starter_loop.sh "$@"
