之前跑一块低端的ARM板子时,由于没上操作系统,所以自己写了个bootloader,通过usb更新应用程序。新的这块要跑Linux,Ethernet,USB,SD卡一应俱全,虽然改了一下能够启动Linux,但是要支持Ethernet,USB和SD卡更新要做的东西太多,于是打算移植一个bootloader来用。
在网上找流行的U-boot资料,不经意间翻到barebox,号称是U-boot的升级版本,稍微看了下,支持Ethernet,USB和SD,已经满足我的要求了。而且同U-boot相比,它基于kbuild编译,有一个可视化的menuconfig,类似于Linux的编译,比较方便直观,于是决定就用它了。
barebox的主页(www.barebox.org)提供的最新的release版本是v2010.11.0,还不支持mci即SD卡,但是已经看到有新的补丁支持mci了,于是通过git来下载最新的代码。
kubuntu 10.10好像默认已经安装git了,在/home/xxx/Downloads下输入
git clone git://git.pengutronix.de/git/barebox.git barebox :该命令是在当前目录复制一个barebox的镜像,命名为barebox
cd barebox
git branch barebox20101129 :创建一个名叫barebox20101129的分支
git checkout barebox20101129 :跳到这个分支,即目录下的文件被改成barebox20101129指定版本的文件,目前的分支跟master同步,所以文件是一样的
另可以用git checkout -b barebox20101129来代替上面最后两条指令,附加几条常用git指令:
1 git branch,显示当前分支,激活的打*号,git branch -r 可以显示远端分支,-a显示本地和远端所有分支,-d删除分支
2
3 git branch mybranch version会在本地建立以version为基础的分支
4
5 git describe <branch-name>查看指定分支版本。
6
7 git pull git://xxx master,更新文件到master分支
8
9 git merger <branch-name>合并<branch-name>到当前checkout分支
10
11 git diff master..mybranch 显示两个分支的差别
更详细的命令参考http://www.kernel.org/pub/software/scm/git/docs/user-manual.html ,Linux的每个工具都这么能折腾,汗...
在/home/xxx/下新建一个Workspaces的目录,把barebox目录拷过去,其实直接改也行,反正是改的barebox20101129这个分支,不过还不太习惯...
要动手改了,突然发现还没有装交叉编译器,上www.codesourcery.com下载一个lite版本(也就是不要钱)的gcc,最新的是arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,版本是4.5.1,事后发现有点问题(会产生undefined reference to `__bswapsi2'错误),于是改装之前的一个版本arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,版本是是4.4.1。
运行命令(如果在窗口下移动有个权限的问题,需要换成root登录或者装个nautilus啥的):
tar -jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
sudo mv arm-2010q1 /opt
切换到/home/xxx/Workspaces/barebox目录,修改Makefile:
ARCH = arm
CROSS_COMPILE = /opt/arm-2010q1/bin/arm-none-linux-gnueabi-
粗粗看了一下arch/arm/boards下的目录,pcm038跟我的板子比较接近,于是
make pcm038_defconfig
make menuconfig (这里出错:"Unable to find the ncurses libraries or the required header files." ,sudo apt-get install ncurses-devgit 搞定)
浏览一下后保存退出后
make
当当当当,barebox.bin产生了。预知后事,且听下回分解...