116 lines
4.7 KiB
Plaintext
116 lines
4.7 KiB
Plaintext
|
|
When porting from old barebox the follwing steps must be taken (please complain
|
|
if there's something missing here ;)
|
|
|
|
|
|
- Most of the macros in include/configs/yourboard.h can be removed, especially
|
|
the CONFIG_COMMANDS section. The goal is to remove this file entirely, but
|
|
for now some values are still needed here. If you think some things are better
|
|
configured with the Kconfig system feel free to add them there.
|
|
|
|
- The linker script needs a new section for the initcalls. The handling of the
|
|
barebox command table has changed, too. (The commands are now sorted by the
|
|
linker instead at runtime.) To change it you need an entry like the following
|
|
in your linker script:
|
|
|
|
#include <asm-generic/barebox.lds.h>
|
|
|
|
__barebox_cmd_start = .;
|
|
.barebox_cmd : { BAREBOX_CMDS }
|
|
__barebox_cmd_end = .;
|
|
|
|
__barebox_initcalls_start = .;
|
|
.barebox_initcalls : { INITCALLS }
|
|
__barebox_initcalls_end = .;
|
|
|
|
- Rename your linker script to barebox.lds.S and add the following entry to the
|
|
Makefile to make sure the linker script is generated:
|
|
|
|
extra-y += barebox.lds
|
|
|
|
- Register the devices present in your system in the board specific .c file.
|
|
To see anything you have to at least register a console. In scb9328.c this
|
|
looks like this:
|
|
|
|
static struct device_d scb9328_serial_device = {
|
|
.name = "imx_serial",
|
|
.map_base = IMX_UART1_BASE,
|
|
.size = 4096,
|
|
};
|
|
|
|
static int scb9328_console_init(void)
|
|
{
|
|
platform_device_register(&scb9328_serial_device);
|
|
return 0;
|
|
}
|
|
|
|
console_initcall(scb9328_console_init);
|
|
|
|
- For most boards you will have to register a cfi_flash device. NAND flash
|
|
is not ported yet.
|
|
|
|
- Call devfs_add_partition() to add an environment partition for your device:
|
|
devfs_add_partition("nor0", 0x40000, 0x20000, "env0");
|
|
This will add an area starting at 0x40000 of size 0x20000 of the device
|
|
nor0 as env0.
|
|
|
|
- Port missing drivers. Depending on the driver this can a be rather simple
|
|
process:
|
|
|
|
Serial drivers
|
|
- Declare all functions static.
|
|
- in your probe function fill in a struct console_device and register it
|
|
with console_register()
|
|
|
|
Ethernet drivers
|
|
- Basically do the same as with serial drivers.
|
|
- Identify the parts of the driver which handle the MAC address. There are
|
|
now two functions handling them in struct eth_device.
|
|
|
|
get_mac_address() retrieve the MAC address from the EEPROM if one is
|
|
connected. If you don't have an EEPROM just return -1.
|
|
set_mac_address() set the MAC address in the device. All magic previously
|
|
done with getenv/setenv(ethaddr) must be removed.
|
|
|
|
During startup barebox calls get_mac_address() to see if an EEPROM is
|
|
connected. If so, it calls set_mac_address() with this address. This
|
|
is done even if networking is not used during startup. This makes sure
|
|
that the MAC address is set in the device and Linux can pick it up later.
|
|
- There is now (the beginning of) generic phy support. When porting drivers
|
|
it is recommended to use it. The phy support currently only starts generic
|
|
autonegotiation, so if you have some fancy things to do (or have gigabit
|
|
ethernet) you'll have to extend the phy layer first. Although this is
|
|
extra work, it will pay off some day, as phy support is a great source
|
|
of duplicated code. see drivers/net/dm9000.c or drivers/net/fec_mpc5200.c
|
|
for examples.
|
|
|
|
- Add a clocksource for your system. PowerPCs have a generic decrementer
|
|
counter, so if you have a PowerPC you have nothing to do here. On ARM
|
|
this is SoC dependent. See Documentation/timekeeping.txt for further
|
|
information.
|
|
|
|
- Adjust start.S. On PowerPC there is at least the Problem that the relocation
|
|
offset is defined at compile time. It is easily possible to determine the
|
|
address barebox is currently starting from at runtime and thus allowing it
|
|
barebox to be started at any address. Look at the relocation code and replace
|
|
TEXT_BASE with the following calculation of the runtime address:
|
|
|
|
bl calc_source /* Calculate Source Address */
|
|
calc_source:
|
|
mfspr r4, LR
|
|
subi r4, r4, (calc_source - _start)
|
|
subi r4, r4, 0x100
|
|
|
|
(I'm almost sure that PowerPC has a dedicated instruction for this, un-
|
|
fortunately I know next to nothing of PowerPC assembler, so if you have
|
|
a better way to archieve this, please write to the list.)
|
|
|
|
On PowerPC barebox now runs at the address it was linked to, so you have
|
|
to adjust TEXT_BASE to be in RAM. This makes the various fixup relocation
|
|
functions unnecessary. On PowerPC the removal of -fPIC saves around 10% of
|
|
binary space. It also simplifies debugging because you will see the correct
|
|
addresses in the objdump without doing offset calculation.
|
|
|
|
- On ARM most of the duplicate code under cpu/arm* is already merged into
|
|
arch/arm/cpu. The start.S files are missing though.
|