[[!meta title="Porting ProteanOS to a New Platform"]] You have a computer on which you want to run ProteanOS? Great! ProteanOS configures and builds static (i.e. without modules) Linux-libre images for each target computer and use case to save space and memory. The result is a complete Linux-libre image that takes about 4 MiB or less, instead of an image and modules that all take over 100 MiB. This also means that you'll probably have to configure Linux-libre for your computer, unless you happen to have a computer that ProteanOS already supports (in which case, just go install ProteanOS!). So read on to port ProteanOS to your computer! Set Up a ProteanOS System ========================= Get miniprokit, the "Mini ProteanOS Development Kit", as instructed on the [[download_page|get]]. Connect the storage medium (e.g. a hard disk drive connected using a USB adapter/dock or a USB flash drive). On it, create one primary partition of type 0x83 (Linux) and mark it as bootable. cfdisk, sfdisk, or fdisk can be used for this. Run the following commands (replacing `/dev/sdc1` with the path to the newly created partition and `i686-linux-glibc` with the architecture of the target system) to make and mount an ext4 file system, install ProteanOS into it, and enter a ProteanOS shell: # mke2fs -t ext4 /dev/sdc1 # mount /dev/sdc1 /mnt # /path/to/miniprokit.sh install -a i686-linux-glibc -P dev /mnt # /path/to/miniprokit.sh shell /mnt Install, Configure, and Build the `linux-libre` Source Package ============================================================== Choose a platform on which this new platform will be based. In this tutorial, `ao751h` is used. Install toolchain packages, the source package, and build dependencies: / # opkg install build-essential-$(cat /etc/proteanos_arch) \ > src-linux-libre config-linux-libre-ao751h bc xz \ > libncursesw.5-dev libtinfo-dev terminfo Change to the source package directory and use opkbuild to unpack the upstream sources and install platform configuration files: / # cd /usr/src/linux-libre_3.10.40~gnu-2/ /usr/src/linux-libre_3.10.40~gnu-2 # opkbuild -bcT nop -P ao751h Hide the list of platform configuration files from opkbuild, so the modified configuration won't get overwritten: /usr/src/linux-libre_3.10.40~gnu-2 # mv platconf platconf.no Enter the upstream source tree and configure Linux-libre: /usr/src/linux-libre_3.10.40~gnu-2 # cd tmp/src/ /usr/src/linux-libre_3.10.40~gnu-2/tmp/src # make menuconfig Return to the source package directory and build the package for a platform other than `dev`: /usr/src/linux-libre_3.10.40~gnu-2/tmp/src # cd ../../ /usr/src/linux-libre_3.10.40~gnu-2 # opkbuild -bcdP dimension2400 Make the System Bootable ======================== Install the newly built linux-image package: /usr/src/linux-libre_3.10.40~gnu-2 # opkg install \ > ../linux-image_3.10.40~gnu-2_i686-linux-glibc_dimension2400.opk Set a hostname and enable initialization of services: /usr/src/linux-libre_3.10.40~gnu-2 # cd / / # printf 'proteanos\n' >/etc/hostname / # printf 'enabled\n' >/etc/rc.policy Exit the ProteanOS shell: / # exit Back on the host system, unmount the file system: # umount /mnt The storage medium can then be removed and connected to the target computer. Boot it! Make a `config-*` Source Package ================================ Once the `linux-libre` configuration is tested to boot and support all the relevant hardware and features, a configuration package should be made. Download the `config-*` package for the base platform you chose, either by running, for example, `opkg install src-config-ao751h` on ProteanOS or by cloning the relevant Git repository, e.g. `git clone git://git.proteanos.com/pkg/config-ao751h.git`. Set the `Maintainer` field in the `control` file. Clear the `changelog` file and add an initial revision entry. This also names the package. For example: config-dimension2400 (0.1) trunk * Initial release. -- "P. J. McDermott" Mon, 16 Jun 2014 21:23:20 -0400 Regenerate the metadata for the binary packages: $ ./config clean $ ./config Copy the `linux-libre` configuration file (`tmp/src/.config` under the source package directory) into `src/linux-libre/*/`. The `config-*` package can then be built, e.g. `opkbuild -S` to build the source package. Please notify the ProteanOS community of your porting work, if you haven't already, and offer to upload and maintain the `config-*` package.