Barebox个人定制化的东西主要位于arch/arm/boards下,这次的目标是创建一个基于i.MX27的loader,板名命名为my27。
首先复制arch/arm/boards/pcm038到arch/arm/boards/my27,修改里面的文件名为my27.c和my27.dox ,修改里面的makefile。
在barebox目录下输入make menuconfig,导入pcm038_defconfig,另存为my27_defconfig。
修改arch/arm/Makefile, 加上board-$(CONFIG_MACH_MY27) := my27
上http://www.arm.linux.org.uk/developer/machines/?action=new注册一个新板子,一律输入my27,然后下载新的文件覆盖arch/arm/tools/mach-types。如果不想注册的话,就随便把里面的一个条目改成自己的就行了--如果不是公开发行的板子的话。该文件会在barebox编译的时候在include/generated生成一个头文件mach-types.h,包含了对MACH_MY27的声明,这个声明在arch/arm/mach-imx/Kconfig用到。
修改arch/arm/mach-imx/Kconfig,
在config ARCH_TEXT_BASE中加入default 0xa0000000 if MACH_MY27
在config BOARDINFO中加入default "My i.MX27" if MACH_MY27
在if ARCH_IMX27的choice里加入
config MACH_MY27
bool "My i.MX27"
select MACH_HAS_LOWLEVEL_INIT
select HAVE_MMU
help
Say Y here if you are using i.MX27 board equipped
with a Freescale i.MX27 Processor
修改arch/arm/boards/my27/env/config,把machine改成my27,eth0.serverip改成tftp服务器的地址,kernel_loc和rootfs_loc都改成nand,注释掉nor_part和rootfs_mtdblock_nor,把rootfs_mtdblock_nand改成3。
修改arch/arm/boards/my27下的lowlevel.c和my27.c,主要的不同有:
a)my27没有mc13783电源管理芯片,core给的电压是1.45V一步到位,因此不需对PLL做两个stage处理,在lowlevel.c的SDRAM初始化前直接设定到399MHz。PLL要使能FPM倍频,不然没法reset(reset后时钟来自32.768KHz晶振)。另注意在driver strength没设置之前不要用gpio,会死机。
b)在my27.c对GPIO做设定,lan8700,WM9712等做bootstrap。
c)在my27.c中新增一个mmc设备,enable SD io和clock,在config里增加对SD卡的支持(修改menuconfig),对于SD卡更新下次再开新篇。
d)在my27.c中注释掉cfi_dev和sram_dev
e)在my27.c中修改framebuffer device设定,在drivers/video/imx.c的imxfb_enable_controller和imxfb_disable_controller加入对lcd背光和vdd的处理。
f) 由于barebox的分区大小是256K,因此编译好的barebox.bin不能超过256,另外编辑config能脚本时注意可能会有换行符多出来,最好用vim来改。
运行make menuconfig,修改各项设定后保存退出,编译至调试通过。