欢迎来到皮皮网网首页

【大学编程实践平台源码】【主力拉升行踪指标源码】【通讯协议原理与源码】armlinux源码编译

来源:方块flash源码 时间:2024-11-24 16:35:56

1.如何制作arm-linux-gcc编译工具
2.delphixe linux arm 架构如何编译?源码 - 知乎
3.如何编译arm linux的go
4.qemu搭建arm64 linux kernel环境
5.ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

armlinux源码编译

如何制作arm-linux-gcc编译工具

       ä¸€ã€ä¸‹è½½æºæ–‡ä»¶

       æºä»£ç æ–‡ä»¶åŠå…¶ç‰ˆæœ¬ï¼š

       binutils-2..tar.bz2, gcc-core-4.4.4.tar.bz2 gcc-g++-4.4.4.tar.bz2 Glibc-2.7.tar.bz2 Glibc-ports-2.7.tar.bz2 Gmp-4.2.tar.bz2 mpfr-2.4.0.tar.bz2mpc-1.0.1.tar.gz Linux-2.6..tar.bz2 (由于我在编译出错的过程中,根据出错的信息修改了相关的C代码,故而没有下载相应的补丁)

       ä¸€èˆ¬ä¸€ä¸ªå®Œæ•´çš„交叉编译器涉及到多个软件,主要包括bilinguals、cc、glibc等。其中,binutils主要生成一些辅助工具;gcc是用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具,而glibc主要提供用户程序所需要的一些基本函数库。

       äºŒã€å»ºç«‹å·¥ä½œç›®å½•

       ç¼–译所用主机型号 fc.i,虚拟机选的是VM7.0,Linux发行版选的是Fedora9,

       ç¬¬ä¸€æ¬¡ç¼–译时用的是root用户(第二次用一般用户yyz), 所有的工作目录都在/home/yyz/cross下面建立完成,首先在/home/yyz目录下建立cross目录,然后进入工作目录,查看当前目录。命令如下:

       åˆ›å»ºå·¥å…·é“¾æ–‡ä»¶å¤¹ï¼š

       [root@localhost cross]# mkdir embedded-toolchains

       ä¸‹é¢åœ¨æ­¤æ–‡ä»¶å¤¹ä¸‹å»ºç«‹å¦‚下几个目录:

       setup-dir:存放下载的压缩包;

       src-dir:存放binutils、gcc、glibc解压之后的源文件;

       Kernel:存放内核文件,对内核的配置和编译工作也在此完成;

       build-dir :编译src-dir下面的源文件,这是GNU推荐的源文件目录与编译目录分离的做法;

       tool-chain:交叉编译工具链的安装位;

       program:存放编写程序;

       doc:说明文档和脚本文件;

       ä¸‹é¢å»ºç«‹ç›®å½•ï¼Œå¹¶æ‹·è´æºæ–‡ä»¶ã€‚

       [root@localhost cross] #cd embedded- toolchains

       [root@localhost embedded- toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc

       [root@localhost embedded- toolchains] #ls

       build-dir doc kernel program setup-dir src-dir tool-chain

       [root@localhost embedded- toolchains] #cd setup-dir

       æ‹·è´æºæ–‡ä»¶ï¼š

       è¿™é‡Œæˆ‘们采用直接拷贝源文件的方法,首先应该修改setup-dir的权限

       [root@localhost embedded- toolchains] #chmod setup-dir

       ç„¶åŽç›´æŽ¥æ‹·è´/home/yyz目录下的源文件到setup-dir目录中,如下图:

       å»ºç«‹ç¼–译目录:

       [root@localhost setup-dir] #cd ../build-dir

       [root@localhost build -dir] #mkdir build-binutils build-gcc build-glibc

       ä¸‰ã€è¾“出环境变量

       è¾“出如下的环境变量方便我们编译。

       ä¸ºç®€åŒ–操作过程。下面就建立shell命令脚本environment-variables:

       [root@localhost build -dir] #cd ../doc

       [root@localhost doc] #mkdir scripts

       [root@localhost doc] #cd scripts

       ç”¨ç¼–辑器vi编辑环境变量脚本envionment-variables:[root@localhost scripts]

       #vi envionment-variables

       export PRJROOT=/home/yyz/cross/embedded-toolchains

       export TARGET=arm-linux

       export PREFIX=$PRJROOT/tool-chain

       export TARGET_PREFIX=$PREFIX/$TARGET

       export PATH=$PREFIX/bin:$PATH

       æˆªå›¾å¦‚下:

       æ‰§è¡Œå¦‚下语句使环境变量生效:

       [root@localhost scripts]# source ./environment-variables

       å››ã€å»ºç«‹äºŒè¿›åˆ¶å·¥å…·ï¼ˆbinutils)

       ä¸‹é¢å°†åˆ†æ­¥ä»‹ç»å®‰è£…binutils-2..1的过程。

       [root@localhost script] # cd $PRJROOT/src-dir

       [root@localhost src-dir] # tar jxvf ../setup-dir/binutils-2..1.tar.bz2

       [root@localhost src-dir] # cd $PRJROOT/build-dir/build-binutils

       åˆ›å»ºMakefile:

       [root@localhost build-binutils] #../../src-dir/binutils-2..1/configure --target=$TARGET --prefix=$PREFIX

       åœ¨build-binutils目录下面生成Makefile文件,然后执行make,make install,此过程比较缓慢,大约需要一个分钟左右。完成后可以在$PREFIX/bin下面看到我们的新的binutil。

       è¾“入如下命令

       [root@localhost build-binutils]#ls $PREFIX/bin

delphixe linux arm 架构如何编译? - 知乎

       在编译 Delphixe Linux ARM 架构时,vmlinux 是编译通过将各个子目录下的 built-in.o、.a 等文件链接在一起形成的源码。这些文件是编译如何编译生成的呢?

       编译生成 built-in.a 文件的过程涉及到 vmlinux-deps 变量,其定义了 vmlinux 所依赖的源码文件集合,包括 KBUILD_LDS 连接脚本、编译大学编程实践平台源码KBUILD_VMLINUX_OBJS 和 KBUILD_VMLINUX_LIBS。源码

       KBUILD_LDS 脚本不在此考虑范围内,编译而 KBUILD_VMLINUX_OBJS 和 KBUILD_VMLINUX_LIBS 则包含了各个子目录下的源码 built-in.o 和.a 文件。

       最终,编译vmlinux-deps 的源码值包含了除 arch/arm/kernel/vmlinux.lds 以外的所有要编译链接生成的文件。

       顶层 Makefile 中的编译排序函数 sort 对 vmlinux-deps 的字符串列表进行排序,并去重,源码生成 vmlinux-dirs 变量,编译主力拉升行踪指标源码此变量保存着生成 vmlinux 所需源码文件的源码目录。

       vmlinux-dirs 的值包括了多个目录,如 init、usr、arch/arm/vfp 等。

       顶层 Makefile 中的代码指定了编译过程,主要涉及到对 vmlinux-dirs 中的目录进行编译和链接。

       以 "make -f ./scripts/Makefile.build obj=init" 这个命令为例,讲解详细的运行过程。这里的 Makefile.build 脚本默认目标为__build。

       在只编译 Linux 内核镜像文件时,KBUILD_BUILTIN=1,KBUILD_MODULES 为空。通讯协议原理与源码

       编译过程中,builtin-target 依赖于 real-obj-y 变量,其值为经过排序和去重后的 subdir-builtin 变量。

       编译生成 built-in.a 文件时,需要确保 obj-y、obj-m、obj-、subdir-m 和 lib-target 等变量不全为空。

       最后,使用if_changed 加上参数 cmd_ar_builtin 的方式调用命令,将某个目录下的所有.o 文件链接在一起,最终形成 built-in.a。

如何编译arm linux的go

       Golang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤。

       æ³¨ï¼šæœ¬æ–‡é€‰ç”¨æ ‘莓派做测试,因为树莓派是基于ARM平台的。

       1、编译工具配置

       æ®è¯´ä¸‹ä¸ªç‰ˆæœ¬çš„golang编译工具要使用golang自己来写,但目前还是使用C编译工具的。因此,首先要配置好C编译工具:

       1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装,树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装。

       1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装。

       å®‰è£…完成后可以输入 gcc --version命令验证是否成功安装。

       2、获取golang源代码

       2.1 直接从官网下载源代码压缩包。

       golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:/golang/go1.4.1.src.tar.gz

       2.2 使用git工具获取。

       golang使用git版本管理工具,也可以使用git获取golang源代码。推荐使用这个方法,因为以后可以随时获取最新的golang源代码。

       2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:/download/linux

       2.2.2 克隆远程golang的git仓库到本地

       åœ¨ç»ˆç«¯cd到你想要安装golang的目录,确保该目录下没有名为go的目录。然后以下命令获取代码仓库:

       git clone /go

       å¤§é™†åœ°åŒºå¯èƒ½ä¼šèŽ·å–失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的。好在google已经将golang也托管到github上面,所以也可以通过下面命令获取:

       git clone /golang/go.git

       è§†ç½‘络情况,下载可能需要不少时间。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆= =

       ä¸‹è½½å®ŒæˆåŽï¼Œå¯ä»¥çœ‹åˆ°ç›®å½•ä¸‹å¤šäº†ä¸€ä¸ªgo目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录。

       æ‰§è¡Œä¸‹é¢å‘½ä»¤æ£€å‡ºgo1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:

       git checkout go1.4.1

       è‡³æ­¤ï¼Œæœ€æ–°1.4.1发行版的源代码获取完毕

       3、设置golang的编译环境变量

       ä¸»è¦æœ‰GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义。

       3.1 GOROOT

       ä¸»è¦ä»£è¡¨golang树结构目录的路径,也就是上面git检出的go目录。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值。为了保险起见,可以直接设置为go目录的路径。

       3.2 GOOS和GOARCH

       åˆ†åˆ«ä»£è¡¨ç¼–译的目标系统和平台,可选值如下:

       GOOS GOARCH

       darwin

       darwin amd

       dragonfly

       dragonfly amd

       freebsd

       freebsd amd

       freebsd arm

       linux

       linux amd

       linux arm

       netbsd

       netbsd amd

       netbsd arm

       openbsd

       openbsd amd

       plan9

       plan9 amd

       solaris 淘宝自动采集软件源码 amd

       windows

       windows amd

       éœ€è¦æ³¨æ„çš„是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm。

       3.3 GOARM

       è¡¨ç¤ºä½¿ç”¨çš„浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本。

       æ€»ç»“下来,在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:

       export GOROOT=你的go目录路径

       export GOOS=linux

       export GOARCH=arm

       ç¼–辑完后保存,执行source ~/.bashrc命令让修改生效。

       4、编译源代码

       çŽ¯å¢ƒå˜é‡é…ç½®å®Œæˆè‡ªåŽå°±å¯ä»¥å¼€å§‹ç¼–译源代码。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台)。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件。如果希望只编译不测试,可以运行make.bash脚本。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译。由于硬件情况不同,编译耗费的时间不同。在我的B型树莓派编译过程花费了将近半个小时,编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右。

       5、配置golang运行环境变量

       ç¼–译完成后,go目录下会生成bin目录,里面就是go的运行脚本。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上

       export PATH=$PATH:$GOROOT/bin

       ä¿å­˜åŽåŒæ ·æ‰§è¡Œsource ~/.bashrc命令让环境变量生效。

       è‡³æ­¤ï¼Œgolang源代码编译安装成功。执行go version应该就能看到当前golang的版本信息,表示编译安装成功。

qemu搭建arm linux kernel环境

       搭建ARM Linux内核环境,包含详细步骤如下:

       一、环境准备:

       使用Ubuntu .系统,并下载最新版Linux内核源码(Linux Kernel Archives)。

       安装交叉编译工具链,通过命令行使用`sudo apt-get install gcc--aarch-linux-gnu`或自行下载(开发者网站:developer.arm.com/downloads)。

       安装QEMU版本(最新版为`sudo apt-get install qemu-system-arm`)。

       二、编译内核:

       解压内核源码后,设置`config`文件,使用命令`make ARCH=arm CROSS_COMPILE=aarch-none-linux-gnu- defconfig`进行编译配置。确保`CROSS_COMPILE`前缀与自定义编译工具链名称一致。

       执行`make ARCH=arm CROSS_COMPILE=aarch-none-linux-gnu- Image -j8`编译内核,生成kernel image`Image`和用于gdb调试的玫瑰花源码发布`vmlinux`文件。

       可选步骤:编译内核模块(ko),使用命令`make ARCH=arm CROSS_COMPILE=aarch-none-linux-gnu- modules -j8`。

       三、制作根文件系统:

       选择便捷的busybox作为根文件系统,下载最新版本(busybox-1..1.tar.bz2)。进行编译配置并安装,根文件系统位于`busybox-1..1.tar.bz2/install/`。

       构建ext4 image,合并busybox到img中,为后续实验提供方便。

       四、使用QEMU启动内核:

       创建启动脚本,包含内核`Image`和根文件系统`rootfs.img`的加载,确保脚本具有执行权限。启动脚本用于QEMU环境,简化实验过程。

       完成步骤后,系统搭建完成。此过程记录于操作手册中,方便后续查看与避免重复错误。

ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

       基于 ARM & Linux 的基础学习

       本文整理自“ask imx6ull”开发板的相关资料,以及菜鸟教程、C语言中文网等资源,旨在提炼核心内容,方便后续查阅。对于基础知识,本文将不再详述,如有错误,期待您的指正。请记住,文章基于IMX6ULL的A7内核,配置的交叉编译器对应ARMv7 位,对于A内核如i.mx8mm,则需使用ARMv8 位的工具链。保持清晰的学习态度,耐心探索。

       获取Linux应用和驱动的编译指南,可以从三个途径入手:开发板供应商提供的SDK工具链、ARM官网下载、以及Linaro GCC编译器。具体操作涉及编辑~/.bashrc文件以添加环境变量,并测试编译器版本。

       针对IMX6ULL,SDK中的工具链位于/.../ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin。通过添加至.bashrc并激活,验证工具链可用性。在编写和编译驱动程序时,需编写Makefile并确保环境变量设置正确。

       编译内核时,需根据特定开发板的配置文件,如arch/arm/configs/目录下的内容进行。首先在Linux源码目录执行配置命令,生成内核文件和设备树文件。对于内核模块的编译,同样在Linux源码目录进行,完成后将模块导入目标板的lib/modules目录。

       对于Buildroot构建系统,它简化了嵌入式Linux定制过程,自动化构建bootloader、内核和文件系统。通过一系列Makefile命令,可以快速生成适用于不同目标板的嵌入式Linux环境。学习Buildroot,可以参考相关文档。

       构建过程可能耗时较长,但通过配置不同的配置文件,可以定制化地创建不同需求的文件系统。编译成功后,输出的文件需传输到嵌入式板并安装或烧录至SD卡或eMMC中。