Mini2440移植Ncurses库(一)
时间:2011-01-12 来源:沧之声
先介绍移植的环境,这个可以在嵌入式开发中非常重要的一点。在移植2.4内核到 Mini2440开发板上不成功之后我是深有体会。
环境一:Linux宿主主机用的是RHEL6-i686,虚拟机用的是VMware6.5,目标开发板Friendly ARM 2440,2.6.32的内核,还算比较新,x35的LCD。交叉编译器用的是官方提供的 arm-linux-gcc-4.3.2。Ncurses用的是最近的ncurses-5.7,我喜欢比较新的东西:-)
环境二:在VMware6.5, RH9(2.4), Magic2410实验箱上我也移植成功了。二者的方法非常类似,最 大的不同之处可能就是交叉编译器不一样(其实如果除去搭建交叉编译环境的过程其它的 步骤都是一样的,在后面我会提示的。不过我觉得还是新版的系统和开发板更过瘾,哈哈)。
目前为止,我们假设已经有了环境一的开发环境并且交叉编译器安装在 /usr/local/arm/4.3.2/目录下面本文的后面部分将会以此为背景讲述整个移植过程,在 部分地方针对环境二加以注解。
假设你已经在某处解压了ncurses-5.7的源码包。
1. 首先进入源码目录
# cd ncurses-5.7
2. Configure it!
# ./configure CC=arm-linux-gcc --host --arm-linux --target=arm-linux --enable-widec --with-shared --prefix=/usr/local/arm/4.3.2
这里对configure的参数加以说明,这能够帮助你更好的理解这个编译的过程和细节,也方 便根据你自己的环境编译Ncurses库(当然也包括其它软件)。
CC=arm-linux-gcc
指定编译过程中使用的编译器,也就是我们用到的交叉编译 器。如果是在环境二下,你应该将arm-linux-gcc增加到了当前环境变量之中,所以你不必 过多的担心这个参数会对你使用的编译器无效。
--host
如果没有这个参数,configure过程会出错,并提示你如果使用了交叉编 译工具在configure的时候添加--host参数,
arm-linux
这个我觉得应该是指定程序在arm处理器下运行(有错请指 出)。在环境二下 有的文章说要使用arch=arm来表明未来的代码是在arm处理器下面使 用的,但 是在环境一 下面这样做是个错误。当然如果你的环境二下面的话,就请使 用 arch=arm代替arm-linux 这个参数,反正我是这么觉得的,没有理由。
--target=arm-linux
个人感觉是指定目标系统吧。具体什么我也不清 楚,反正加上就对了。哈哈。
--enable-widec
这个是源码包里面的说明。如果你希望Ncurses库支持宽字集,也就是unicode字符集,简单一点来说就是支持中文,比如在ncurses,menu,form等之中使用中文的话(有关Ncurses库支持中文的方法我会在另一篇文章中说明),你最好加上这个参数。
--with-shared
可能用来指明要生成共享库吧。我不清楚,加上没错。
--prefix=/usr/local/arm/4.3.2
指明你的编译器安装在哪里。因为交叉编译过程中用到的动态或者静态库的指令集都是针对寄主处理器(可以认为是arm处理器或者是其它什么的,反正就不是针对你宿主PC,所以这也是为什么要进行交叉编译的原因)。这里要特别注意的是不要写成/usr/local/arm/4.3.2/因为这样会使安装路径变成/usr/local/arm/4.3.2//,也就是说在onfigure的过程中会自动在末尾添加一个反斜杠。
然后终端打印大量配置信息,最后几行说明了ncurses工具、头文件、库文件、帮助文档和终端信息安装在哪个目录下
3. 开始make并安装
# make HOSTCC=gcc CXX=arm-linux-c++ && make install
至此我们的移植过程算是完成了一半。也就是在给交叉器加入了适合Mini2440使用的库, 能够全我们正常的交叉编译我们的ncurses代码。下一篇文章我们将会讲述如何在Mini2440上使我 们的程序正常运行。