summaryrefslogtreecommitdiffstats
path: root/doc/plat/porting.mdwn
blob: fe837066699a602386bd01ea30b43b3cc9728822 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
[[!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" <pj@pehjota.net>  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.