Cross-compile ncurses into stage3 chroot.
[fedora-riscv.git] / README
1 A plan for Fedora/RISC-V
2 ----------------------------------------------------------------------
3 by Richard W.M. Jones (rjones@redhat.com)
4
5 Project home page: https://fedoraproject.org/wiki/Architectures/RISC-V
6
7
8 The aim of the project
9 ----------------------
10
11 Get Fedora running on the RISC-V architecture!  This will just be an
12 initial pass, which we're calling an "experimental architecture".  It
13 won't even be a secondary architecture for perhaps 1 to 3 years.
14
15 About Fedora: https://getfedora.org/
16 About RISC-V: https://riscv.org/
17               https://en.wikipedia.org/wiki/RISC-V
18      lowRISC: http://www.lowrisc.org/
19
20
21 How do we expect people to consume Fedora/RISC-V?
22 -------------------------------------------------
23
24 Most users will download binaries.  Of course source will be available
25 for [almost*] everything, buildable from source RPMS.
26
27 Currently no hardware is available, so you either have to run RISC-V
28 on an FPGA, or use QEMU/Spike emulation.
29
30 For the FPGA option, you will need a Nexys 4 DDR development kit
31 costing around US$341, plus an ordinary micro SD card (8+ GB), plus a
32 host Fedora/x86-64 computer.
33
34   - Maximum system RAM is 128 MB (1 GB is available if you use the
35     other far more expensive FPGA development kit)
36
37   - There is a 115200 bps 8n1 serial port.
38
39   - There is no ethernet and no display.
40
41 For the QEMU emulation option, see below.
42
43   - QEMU has unlimited system RAM.
44
45   - Network access is available.
46
47 For the Spike emulation option, see below.
48
49   - Spike has unlimited system RAM.
50
51   - No network.
52
53
54 [*] Some CPU peripherals use proprietary IP.  The aim is to replace
55 these with open equivalents eventually.  Building the FPGA bitstream
56 will require proprietary tools, although the source itself is free
57 software.
58
59
60 What parts of Fedora are we aiming to build?
61 --------------------------------------------
62
63 The @Core packages (as RPMs), rpmbuild, gcc, and a bootable binary
64 disk image.
65
66 Only 64 bit RISC-V will be targeted.
67
68 Once those are done, we can declare victory.
69
70
71 What parts of Fedora are we *not* aiming to build?
72 --------------------------------------------------
73
74 Nothing outside @Core except for specific compilers and build tools.
75
76 Not Anaconda.
77
78 Not Koji (at least, not at first).
79
80 Not Grub nor EDK2.  We will initially use the Berkeley bootloader
81 (bbl), but aim for a standard bootloader later.
82
83
84 Where will we build it?
85 -----------------------
86
87 The packages which are run on the host (x86-64) computer will be built
88 in COPR (https://copr.fedorainfracloud.org/).
89
90 However the majority of packages will be built on RISC-V itself.
91 Since there are no RISC-V builders, and we cannot really provide them,
92 initially developers will be building them on their own FPGAs /
93 emulators and uploading them.
94
95 Getting build infrastructure would be a more long-term aim.
96
97
98 Bootstrapping stages
99 --------------------
100 [See also: https://fedoraproject.org/wiki/Architectures/AArch64/Bootstrap]
101
102 * Stage 1
103
104 (1a) riscv-qemu.x86_64: QEMU + RISC-V system emulation
105
106 Not upstream, fork of qemu 2.5.0.
107 https://github.com/riscv/riscv-qemu
108 Status: done http://copr-fe.cloud.fedoraproject.org/coprs/rjones/riscv
109
110 Note this package runs on x86-64 hosts, and is intended for people who
111 want to run Fedora/RISC-V but who do not have FPGA/hardware.
112
113 (1b) riscv-isa-sim.x86_64: Spike system emulator
114
115 Since QEMU is broken at the moment, we must use the slower Spike
116 emulator instead.
117
118 (1c) Nexys4 DDR FPGA
119
120 Various sources, see:
121 http://www.lowrisc.org/docs/untether-v0.2/fpga-demo/
122
123 * Stage 2
124
125 (2a) GNU cross-compiler toolchain.
126
127 https://github.com/lowRISC/riscv-gnu-toolchain
128 Status: done http://copr-fe.cloud.fedoraproject.org/coprs/rjones/riscv
129
130 (2b) Berkley Bootloader (bbl)
131
132 https://github.com/lowrisc/riscv-pk.git
133 Status: done http://copr-fe.cloud.fedoraproject.org/coprs/rjones/riscv
134
135 Used to boot the kernel and mount the root filesystem on FPGAs and
136 QEMU.
137
138 * Stage 3
139
140 (3a) kernel.riscv64: The Linux kernel, cross-compiled.
141
142 Current status: Not upstream, fork of Linux 4.6.
143 https://github.com/lowrisc/riscv-linux
144
145 (3b) "Just enough userspace"
146
147 The following packages, cross-compiled from x86-64 host to riscv64
148 target filesystem.  The aim is to have a filesystem (not RPMs) that
149 can be booted on RISC-V hardware or under QEMU, which will be
150 sufficient to use to compile RPMs.
151
152 bash.riscv64
153 glibc.riscv64
154 binutils.riscv64
155 gcc.riscv64
156 cpp.riscv64
157 rpm.riscv64
158 coreutils.riscv64
159 filesystem.riscv64 (?)
160 gawk.riscv64
161 grep.riscv64
162 gzip.riscv64
163 sed.riscv64
164 xz.riscv64
165 zlib.riscv64
166
167 We will also need to add the following noarch packages (these do not
168 need to be compiled, they can just be copied from another Fedora
169 system):
170
171 basesystem.noarch
172 ca-certificates.noarch
173 crypto-policies.noarch
174 emacs-filesystem.noarch
175 fedora-release.noarch
176 fedora-repos.noarch
177 setup.noarch
178 tzdata.noarch
179
180     ==== At this point, Fedora on RISC-V will be self-hosting ====
181
182 * Stage 4
183
184 (4a) kernel.riscv64: The Linux kernel, compiled as an RPM on RISC-V.
185
186 (4b) Userspace RPMs
187
188 (See the above list of packages, but built from SRPMs)
189
190 (4c) Recreate the filesystem from RPMs.
191
192 Distribute an initial bootable binary disk image which is completely
193 built from RPMs (but note, not created by Anaconda).
194
195 (4d) Continue compiling all other RPMs from @Core.
196
197 As more packages are compiled, distribute them as RPMs and distribute
198 updated bootable binary disk image.
199
200 (4e) Declare victory and celebrate!
201
202
203 Open issues
204 -----------
205
206 What architecture string to use (eg. in RPM package names)?  There are
207 32, 64 and (in theory) 128 bit variants of RISC-V.  GNU uses "riscv64".