/** @page dev_board Adapting a new Board

To add a new board to @a barebox a few steps must be done, to extend and modify
the @a barebox source tree.

@section board_add_files Files/Directories to be added

 - arch/\<architecture\>/boards/\<boardname\>
 - arch/\<architecture\>/boards/\<boardname\>/Makefile
 - arch/\<architecture\>/boards/\<boardname\>/\<boardname\>.c
 - arch/\<architecture\>/boards/\<boardname\>/\<boardname\>.dox
 - include/configs/\<boardname\>.h
 - arch/\<architecture\>/configs/\<boardname\>_defconfig

@subsection board_makefile arch/\<architecture\>/boards/\<boardname\>Makefile

@verbatim
	obj-y += all files that builds the BSP (Assembler and/or C files)
@endverbatim

@subsection board_basefile arch/\<architecture\>/boards/\<boardname\>\<boardname\>.c

TBD

@subsection board_doxygen arch/\<architecture\>/boards/\<boardname\>/\<boardname\>.dox

This file should describe in short words your new board, what CPU
it uses, what resources are provided and features it supports.

Use the doxygen style for this kind of documentation. Below you find a
template for this kind of file:

@verbatim
/** @page <boardname> <Manufacturer> <Board's Name>

This board uses an <architecture> based CPU. The board is shipped with:

- many MiB NOR type Flash Memory
- many MiB SDRAM
- a very special network controller

and so on.

*/
@endverbatim

To make your new shiny file visible in the automatically generated
documentation you must sort in the used page lable ("<boardname>" in the
template above) into Documentation/boards.dox as:

@verbatim
 ...
 @subpage <boardname>
 ...
@endverbatim

at the right architecture.

@note Consider to use an unique page lable.

@subsection board_lscript arch/\<architecture\>/boards/\<boardname\>/barebox.lds.S

If your board needs a special binary @a barebox layout, you can provide a local
board linker script file. This will replace the generic one provided by your
architecture or CPU support.

Add this file with

@verbatim
	extra-y += <board_linker_script>
@endverbatim

in your local \b Makefile to the list of files, forwarded to the last linking step.

@section board_defconfig arch/\<architecture\>/configs/\<boardname\>_defconfig

TBD

@section board_mod_files These files needs to be modified:

 - modify Documentation/board.dox
 - modify arch/\<architecture\>/Kconfig
  - add your board (MACH_*) to the list
  - add your default text base address for this architecture (ARCH_TEXT_BASE)
  - add BOARDINFO with valueable info for your board
 - modify arch/\<architecture\>/Makefile:
  - add board-$(MACH_*) = \<your board_dir\>

First, the new board should be visible in the menu.

@section board_specific_cpu Porting hints for specific CPUs

@li @subpage dev_s3c24xx_mach

*/
