自己动手编译交叉编译链


这篇文章主要记录一下自己编译 交叉编译链工具的过程。其实很多工作都是别人已经帮我们做好了的,我只是使用一下别人做好的工具。

编译的过程中,主要使用到的工具是:crosstool-ng   
编译的流程主要是:
    1、先编译安装 crosstool-ng
    2、配置 crosstool-ng
    3、crosstool-ng 这个工具就把剩下的工具都帮你做了。        //crosstool-ng做剩下的工作的时候,需要有网络,如果没有网络,比较麻烦,后面会说。

编译安装 crosstool-ng 的流程:
    1、去官网下载源码包。官网链接:http://crosstool-ng.github.io/download/    通过git可以直接下载:git clone https://github.com/crosstool-ng/crosstool-ng
    2、通过git直接下载后,进入 crosstool-ng 目录。里面有个README.md 文档。可以阅读它。它会告诉你,叫你去这个网址 http://crosstool-ng.github.io/docs/  这个网址会告诉你怎么配置安装。
    3、进入这个网址后,发现是英文。没什么太大的问题啦。用Google 浏览器打开,翻译成中文,啥都搞定啦。
    4、接下来就是配置了。//如果你不看网址的介绍,就继续看。建议看网址里面的介绍,它介绍的肯定比我好。
        先运行    :./bootstrap   
        会生成    :.configure 文件。
        然后运行    :./configure --prefix=/some/place            //注:/some/place  这个路径就是你想把 crosstool-ng 这个工具安装在哪里的路径
        接着运行    :make    //make的时候,会需要一些依赖包,提示什么就安装什么。如果它提示需要libtool,你又安装了,那么你再安装一个libtool.bin就行了。

主要安装:apt-get install -y gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \
    python-dev autoconf automake libtool libtool-bin gawk wget bzip2 xz-utils unzip \
    patch libstdc++6
        最后运行    :make install
    5、这个时候,你去你安装路径(就是第四步指定的 /some/place)下面的 bin文件目录下,会发现一个 ct-ng 文件,这个文件就是 crosstool-ng 这个工具的可执行文件。
    6、导入环境变量,让你可以使用 ct-ng 这个可以执行程序。    //环境变量设置后,如果你 输入 ct- 按table键,能补全ct-ng,说明导入环境变量成功。
    
到了这里,完成了一半了。
接下来,你新建一个目录,随便建那里。

    1、比如在建了 /arm-tool 这样一个目录。    
    2、我们回到 crosstool-ng 的根目录下。会找到一个 samples 目录,进入samples目录。在里面可以看到很多的目录。根据目录的意思,你大致就知道你要用哪个了。我的板子是armv7。那么我就用armv7这个对应目录里面的东西。
    3、复制armv7目录里面的东西到 /arm-tool 目录里面。
    4、进入 /arm-tool 目录
    5、将 crosstool.config 文件复制一份,命名为 .config     //就是执行这个命令: cp crosstool.config   .config
    6、执行命令: ct-ng  menuconfig        这个时候,弹出一个界面,我们只需要在这个界面里面设置就行了。

1、进入:Paths and misc options  --->

2、Local tarballs directory    //我这里在第六行,设置这个东西   这个东西意思就是,你本地的源码在哪里。后面编译的时候,到这个地方找源码

3、Prefix directory            //我这里在第十行设置这个东西, 这个东西的意思就是,你编译好的东西,我给你放哪里

扫描二维码关注公众号,回复: 6083632 查看本文章

然后退出

4、进入:Target options  --->

5、设置: Target Architecture  为 (arm)

6、设置 Emit assembly for CPU 和   Use specific FPU   这两项要根据你的硬件进行匹配。

7、进入:Toolchain options  --->

8、设置:Tuple's vendor string    //设置这个,没什么实际的作用。可能能区分一下编译链。

     设置了,你的编译就是 arm-lqd-linux......这样的

9、设置:Tuple's alias      //设置这个,就是给你的编译链取个别名,它会软连接到实际的编译链上去。

10、进入:Operating System  --->

11、设置:Version of linux   //这里就是设置你的linux版本。不知道设置这个有什么用。即使版本不匹配,好像照样能用。

到了这里,基本就差不多了,然后保存,退出。

最后执行:ct-ng   build   程序就开始编译了。

程序会自动去网上下载源码,这个过程比较慢。//注:这个时候,如果你的电脑没网的话,那么它会一直检索。

没有网络的解决办法:

     你会看到程序运行的时候,会提示说在检索什么什么。这个时候,你可以把它需要的这个东西,自己从网上下载下来,然后把压缩包然后我们第2步指定的源码目录下。然后它会自动的去解压。

    注:程序需要的源码,有个对应的版本号,这个版本号是可以配置的。我这里只修改了内核版本,其他的没有修改,使用的是默认的版本。

程序编译好后,会在我们第3步指定的目录里面。目录里面有个bin目录,里面就是我们需要的交叉编译链了。

如果出错了,编译的目录下有个build.log,你把错误信息复制到这个log文件里面,就可以知道到底哪错了。

猜你喜欢

转载自blog.csdn.net/a3121772305/article/details/88371696
今日推荐