如果这个x-loader(一级引导程序)和u-boot(二级引导程序)都弄好了,剩下的内核和文件系统的导入就很easy了。
开发阶段一般都使用tftp的方式来载入内核和根文件系统。
自带的系统使用的是ubi文件系统,那么就先了解下ubi文件系统吧。
编译环境:fedora 10
1,按照链接,下了zlib-1.2.3.tar.gz,lzo-2.03.tar.gz,mtd-utils_20080508.orig.tar.gz
注释:zlib是一种压缩算法,目标机也就是开发板使用MTD工具的时候,需要zlib库的支持。
lzo是致力于解压速度的一种数据压缩算法,LZO 是 Lempel-Ziv-Oberhumer 的缩写。
2,编译安装zlib
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
make
make install
3,编译安装lzo
tar xzvf lzo-2.03.tar.gz
cd lzo-2.03
然后
make
出现了问题,提示没有配置文件。于是查看INSTALL文件,vi ./INSTALL
有下面几行
Quick start
---------------
./configure
make
make check
make test (run a full test)
make install (when logged in as root)
于是先使用
./configure
然后 make
make check (会提示 All checks passed)
make test (会提示 All tests passed.Now you are ready to install LZO)
make install
make check与make test不使用也可以。
4,编译mtd-utils
tar xzvf mtd-utils_20080508.orig.tar.gz
cd mtd-utils-20080508
make
会提示
==============
recv_image.c: In function 'main':
recv_image.c:129: error: storage size of 'rq' isn't known
recv_image.c:129: warning: unused variable 'rq'
recv_image.c:311: warning: format '%08lx' expects type 'long unsigned int', but argument 2 has type 'uint32_t'
recv_image.c:311: warning: format '%08lx' expects type 'long unsigned int', but argument 3 has type 'uint32_t'
recv_image.c:311: warning: format '%08lx' expects type 'long unsigned int', but argument 4 has type 'uint32_t'
make[1]: *** [recv_image.o] Error 1
==============
这是一个BUG,可以根据下面修改
diff --git a/recv_image.c b/recv_image.c
index 3b79304..d65aa2a 100644 (file)
--- a/recv_image.c
+++ b/recv_image.c
@@ -1,14 +1,14 @@
#define _XOPEN_SOURCE 500
-#define _USE_MISC
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#define __USE_GNU
+#include
+#include
#include
-#include
+#include
#include
#include
#include
@@ -307,7 +307,7 @@ int main(int argc, char **argv)
~(meminfo.erasesize - 1);
erase.length = meminfo.erasesize;
- printf("Will erase at %08lx len %08lx (bad write was at %08lx)\n",
+ printf("Will erase at %08x len %08x (bad write was at %08x)\n",
erase.start, erase.length, eraseblocks[block_nr].flash_offset);
if (ioctl(flfd, MEMERASE, &erase)) {
perror("MEMERASE");
MTD userspace toolsRSS Atom
然后重新make,成功,然后会在文件夹 ./ubi-utils/new-utils下面生成我们需要的ubiattach、ubimkvol等文件。
等到这时,我才发现我没有交叉编译,编译成功了也没有任何意义。在此记下来,重要的是过程。
阅读(1754) | 评论(0) | 转发(0) |