去年一月份做的笔记,一直没有发表,现在在找工作,才发觉自己的工作习惯不太好,笔记的话最好还是能够发出来,大家一起阅读,交流这样才能提升的快些,在这里很是感谢那些在CSDN,51CTO,和cnblog里分享自己成果的大牛们。学习的很多东西都是在这些大牛的启发下学习,并掌握的。我也会陆陆续续地把自己工作中用到的知识点分门别类地整理出来,给后来者提供一些方便。关键点都已标出,若还有不解之处,欢迎留言,大家讨论。
1)将光盘 Linux 目录中的 arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 复制到 /opt/tmp
#sudo cp /mnt/hgfs/ubuntu_window/arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz /opt/tmp
ubuntu_window 为共享文件夹
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C /
注意: C 后面有个空格,并且 C 是大写的,它是英文单词“ Change”的第一个字母,在此
是改变目录的意思。执行该命令,将把 arm-linux-gcc 安装 /opt/FriendlyARM/toolschain/4.5.1目录。
2)
把编译器路径加入系统环境变量,运行命令
#gedit /root/.bashrc编辑 /root/.bashrc 文件, 注意“ bashrc ”前面有一个“ . ”,修改最后一行为export
PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。如图,保存退出。
export PATH=$PATH:/opt/FriendlyARM/tool
schain/4.5.1/bin
重启,或者注销。使以上设置生效,在命令行输入arm-linux-gcc –v,会出现如下信息,这说明交叉编译环境已经成功安装。
3)
解压安装源代码及其他工具
解压安装开发学习过程所用到的全部源代码以及其他一些小工具,这包括:
- Linux 内核源代码
- Qtopia-2.2.0 平台源代码(分为 x86 和 arm 平台两个版本)
- arm-qt-extended-4.4.3 平台源代码(也就是 Qtopia4, 分为 x86 和 arm 两个版本)
- QtE-4.8.5 平台源代码(arm 版本)
- busybox-1.17 源代码
- Linux 编程示例源代码
- 目标文件系统目 录
- 目标文件系统映象制作工具(包括 yaffs2 和 UBIFS)
-
图形界面的 Linux logo 制作工具
logomaker
注意:所有的源代码和工具都是通过解压方式安装的,所有的源代码均使用统一的编译器
arm-linux-gcc-4.5.1 编译
A)解压安装源代码
首先创建工作目录/opt/FriendlyARM/mini210/linux
在命令行执行#mkdir –p /opt/FriendlyARM/mini210/linux
后面步骤的所有源代码都会解压安装到此目录中:
(1)准备好Linux 源代码包
在Ubuntu系统中/tmp 目录中创建一个临时目录/tmp/linux
#mkdir /tmp/linux
把光盘中 linux 目录中的所有文件都复制到/tmp/linux 目录中
sudo cp -r /mnt/hgfs/ubuntu_window/* /tmp/linux
说明: 这样做是为了统一下面的操作步骤,其实你可以使用其他目录,也可以直接从光盘解压安装。
(2)
解压安装
Linux内核源代码
在工作目录/opt/FriendlyARM/mini210/linux 中执行:
#cd /opt/FriendlyARM/mini210/linux
#
sudo tar xvzf /tmp/linux/linux-3.0.8-20141105.tgz
将创建生成 linux-3.0.8 目录,里面包含了完整的内核源代码
说明: 20141105 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。
(3)解压安装目标文件系统
执行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#sudo tar xvzf /tmp/linux/rootfs_qtopia_qt4-20141212.tgz
将创建生成 rootfs_qtopia_qt4 目录
说明: 20141212 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。
(4)解压安装嵌入式图形系统qtopia 源代码
在工作目录/opt/FriendlyARM/mini210/linux 中执行:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/x86-qtopia-20100420.tar.gz
#tar xvzf /tmp/linux/arm-qtopia-20101105.tar.gz
将创建 x86-qtopia 和 arm-qtopia 两个目录,并内含相应的全部源代码。
说明: x86-qtopia 和 arm-qtopia 后面或许会有日期尾缀, 它是我们的发行或更新日期标志,请以光盘中实际日期尾缀为准。 源代码包中也包含了嵌入式浏览器 konquor 的源代码。
(5)解压安装嵌入式图形系统qt-extended-4.4.3 源代码在工作目录/opt/FriendlyARM/mini210/linux 中执行:
#cd /opt/FriendlyARM/mini210/linux#tar xvzf /tmp/linux/x86-qt-extended-4.4.3-20101003.tgz
#tar xvzf /tmp/linux/arm-qt-extended-4.4.3-20101105.tgz
将创建 x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 两个目录,并内含相应的全部源代码。
说明: x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 后面或许会有日期尾缀, 它是我们的发行或更新日期标志,请以光盘中实际日期尾缀为准。
(6)解压安装QtE-4.8.5 源代码
在工作目录/opt/FriendlyARM/mini210/linux 中执行:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/arm-qte-4.8.5-20131207.tar.gz
(7)解压安装busybox 源代码
Busybox 是一个轻型的 linux 命令工具集,在此使用的是 busybox-1.13.3 版本。用户可以从其官方网站下载最新版本(http://www.busybox.net)。
在工作目录/opt/FriendlyARM/mini210/linux 中执行:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/busybox-1.17.2-20101120.tgz
将创建 busybox-1.17.2 目录,内含相应版本的全部源代码。
说明: 为了方便用户编译使用,我们做了一个缺省的配置文件 fa.config。
(8)解压安装Linux 示例程序执行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/examples-mini210-20120912.tgz
将创建 examples 目录,并包含初学 linux 编程代码示例。
说明: 20120912 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。 examples 目录中的代码均为友善之臂自主开发,并全部以源代码方式提供,它们都是一些基于命令行的小程序。
B)解压创建目标文件系统
执行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/rootfs_qtopia_qt4-20141212.tgz
将创建 rootfs_qtopia_qt4 目录,该目录和目标板上使用的文件系统内容是完全一致的。
说明:
该文件系统
包含了前面你所看到的 qtopia-2.2.0, Qtopia4 和 QtE-4.8.5 测试软件等, busybox,还有常用的命令行工具等
C)解压创建文件系统映像工具
要把目标文件系统全部写入开发板中,一般还需要先把目标文件系统目录制作成单个的映像文件以便烧写或者复制, Linux内核启动时,一般会根据命令行参数挂在不同格式的系统,比如 yaffs2, ubifs, ext2 等。在此需要使用mkyaffs2image-128M 和mkyaffs2image-mlc2 这两个工具。
mkyaffs2image-128M 工具适用于 SLC NAND flash,而mkyaffs2image-mlc2 工具适用于MLC NAND flash,它们都用来压制 yaffs2 格式的映像文件。
先将光盘 Android 目录中的 mktools-YYYYMMDD.tar.gz 文件拷贝到ubuntu 的/tmp 目录下,执行以下命令安装 mktools 工具链:
#tar xvzf /tmp/mktools-YYYYMMDD.tar.gz –C /(注: YYYYMMDD 替换为实际的日期)将会在/usr/sbin目录下创建生成相应的工具集。
注意: C 是大写的, C 后面有个空格, C 是改变解压安装目录的意思说明: 如果你以前安装过 mini2440 或者 mini6410 使用的 mkyaffs2image 系列工具,它们将会被覆盖,请不必担心,它们功能都是相同的。
D)解压安装LogoMaker(非必需,可跳过)
LogoMaker 是友善之臂开发的一个 Linux Logo 简易制作工具,网上有很多资料介绍如何使用命令行的工具把 bmp, jpg, png 等格式的图片转换为 Linux Logo 文件,在此我们设计了一个图形化的版本,它是基于 Fedora9 开发。执行以下命令:
#tar xvzf /tmp/linux/logomaker.tgz –C /
注意: C 是大写的, C 后面有个空格, C 是改变解压安装目录的意思
说明:执行以上命令, LogoMaker 将会被安装到/usr/sbin 目录下,它只有一个文件,安装完之后在命令行输入 logomaker 时
提示错误./logomaker: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory 找不到libjpeg的动态链接文件。
解决方法:sudo apt-get install libjpeg62-dev
不过在ubuntu下使用会出现生成的图片为0字节,为了解决这个方法先sudo apt-get install netpbm 安装netpbm。再次使用logomaker还是出现0字节的现象,放弃使用logomaker,
直接使用netpbm的命令行工具。
pngtopnm open_show.png > temp.ppm
ppmquant 224 temp.ppm >temp2.ppm
pnmnoraw temp2.ppm > logo_linux_clut224.ppm
E)配置和编译内核
Linux 内核与 Android 内核使用的是同一份源码,但是配置不同,使用以下命令编译内核。
#cd /opt/FriendlyARM/mini210/linux/linux-3.0.8
#sudo cp mini210_linux_defconfig .config ;注意config 前面有个”.”
#sudo make menuconfig
你可以执行 make menuconfig 对配置进行修改,修改完成后,输出 make 进行编译:
#make最后会在 arch/arm/boot 目录下生成 zImage,将它替换掉 SD 卡 images/Linux/下的 zImage 烧写到开发板即可。
lyun@linux:/opt/FriendlyARM/mini210/linux/linux-3.0.8$sudo make menuconfig HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1
make: *** [menuconfig] 错误 2
安装
sudo apt-get install libncurses5-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
libtinfo-dev
建议安装的软件包:
ncurses-doc
下列【新】软件包将被安装:
libncurses5-dev libtinfo-dev
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 707 个软件包未被升级。
需要下载 312 kB 的软件包。
解压缩后会消耗掉 1,334 kB 的额外空间。
您希望继续执行吗?[Y/n]
y
【警告】:下列软件包不能通过验证!
libtinfo-dev libncurses5-dev
不经验证就安装这些软件包吗?[y/N]
Y
获取:1 http://mirrors.163.com/ubuntu/ precise/main libtinfo-dev i386 5.9-4 [93.5 kB]
获取:2 http://mirrors.163.com/ubuntu/ precise/main libncurses5-dev i386 5.9-4 [218 kB]
下载 312 kB,耗时 1秒 (288 kB/s)
Selecting previously unselected package libtinfo-dev.
(正在读取数据库 ... 系统当前共安装有 144800 个文件和目录。)
正在解压缩 libtinfo-dev (从 .../libtinfo-dev_5.9-4_i386.deb) ...
Selecting previously unselected package libncurses5-dev.
正在解压缩 libncurses5-dev (从 .../libncurses5-dev_5.9-4_i386.deb) ...
正在设置 libtinfo-dev (5.9-4) ...
正在设置 libncurses5-dev (5.9-4) ...
lyun@linux:/opt/FriendlyARM/mini210/linux/linux-3.0.8$ sudo make
[sudo] password for lyun:
make: arm-linux-gcc:命令未找到
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”是最新的。
CC kernel/bounds.s
/bin/sh: 1: arm-linux-gcc: not found
make[1]: *** [kernel/bounds.s] 错误 127
make: *** [prepare0] 错误 2
直接使用root进行make 少很多问题。所以一下操作均在root下执行
解决方法:
1.先打开一个超级用户权限的shell:
命令:sudo –s
2.在当前shell下,设置环境变量:
命令:gedit /etc/profile
在文件末端加上 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,并保存。
3. 执行source /etc/profile 这是避免重新启动ubuntu而又使刚刚修改的环境变量生效的方法。
F)配置和编译busybox
一般从官方网站下载的 busybox 源代码,需要根据所需重新配置一下,才可以编译使用,
我们已经做好了一个缺省的配置文件: fa.config,无论是 2440 和 6410 我们均使用了此配置,通
过它编译出的 busybox 可以满足绝大部分的需要,进入 busybox 源代码目录
/opt/FriendlyARM/mini210/linux/busybox-1.17.2
执行:
#cp fa.config .config
#make
稍等一会,即可在当前目录编译生成 busybox 目标文件,它和开发板预装的是一样的,一
般 busybox 是不需要更新的。
G)制作目标版文件系统映像
使用 mkyaffs2image-128M 和 mkyaffs2image-mlc2 工具,可以把目标文件系统目录制作成 yaffs2 格式的映像文件,两个工具的区别是: mkyaffs2image-128M工具适用于 SLC NAND flash, 而 mkyaffs2image-mlc2 工具适用于 MLC NAND flash。 要将 Linux 文件系统制作成 yaffs2 格式的烧写文件,输入以下命令即可: 1) 制作适用于 SLC NAND Flash 的映象文件: #cd /opt/FriendlyARM/mini210/linux/ #mkyaffs2image-128M rootfs_mini210 rootfs_qtopia_qt4.img 2) 制作适用于 MLC NAND Flash 的映象文件: #cd /opt/FriendlyARM/mini210/linux/ #mkyaffs2image-mlc2 rootfs_mini210 rootfs_qtopia_qt4-mlc2.img
rootfs_mini210为实际的文件系统
将生成的 rootfs_qtopia_qt4.img 或 rootfs_qtopia_qt4-mlc2.img 替换掉 SD 卡 images/Linux/ 下的同名文件烧写到开发板即可。