失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ubuntu20.04.1 64位搭建嵌入式linux开发环境

ubuntu20.04.1 64位搭建嵌入式linux开发环境

时间:2023-01-13 07:42:20

相关推荐

ubuntu20.04.1 64位搭建嵌入式linux开发环境

目录

背景开发环境的搭建1.交叉编译工具的安装2.开发工具和依赖库的安装2.1. 必需部分2.2.可选部分ubuntu20.04.1 64位配置和编译Linux3.0内核

背景

市面上的嵌入式linux开发板厂商提供给客户的开发环境往往是低版本的ubuntu,因为他们没有精力去测试每个版本的ubuntu,一旦某个版本调通了,这个版本就用一直用下去,不会换新的,这主要是考虑到人力成本。

理论上,高版本的ubuntu也是可以搭建好嵌入式linux开发环境的,只不过相比低版本的ubuntu,可能会做更多一些的工作,但总的来说也没有多少内容。

选择高版本的ubuntu的好处是什么呢?答案是,可以更好地支持其他软件或库,比如高版本的opencv就需要高版本的ubuntu才能支持。

开发环境的搭建

搭建嵌入式linux开发环境,主要包含两部分内容:

交叉编译工具的安装。开发工具和依赖库的安装,包括必需的和可选的。

这里先说下我的linux源码和交叉编译工具的来源:这两个都是由迅为开发板厂商提供,交叉编译工具包是arm-q3.tar.bz2,linux内核版本为3.0。

我的ubuntu20.04.1 64位是运行在 vmware workstation pro 15 上的虚拟机。

1.交叉编译工具的安装

本质上就是把交叉编译工具解压到某个目录下,然后在PATH环境变量中添加此目录下的bin目录,以便其他应用程序找到交叉编译工具的可执行文件,最后修改linux源码根目录的Makefile里的CROSS_COMPILE变量,用于指定编译内核的编译器。由于交叉编译工具属于系统开发级的东西,所以把它放在Home下显得不太合适。一般我们可以考虑把它放在/usr/local下,我们在/usr/local下建立一个arm文件夹,表示这是用于arm的交叉编译工具,然后将arm-q3.tar.bz2拷贝到/usr/local/arm下解压即可。解压命令为:

tar xvf arm-q3.tar.bz2

接下来就是把交叉编译工具路径添加到PATH环境变量中。为了让每次系统重启后,PATH环境变量仍然能够包含我们的路径,PATH环境变量的添加应放在linux自启动脚本中进行。自启动脚本有好几个:有用户级的,也有系统级的,我一般喜欢用/etc/profile这个脚本。

sudo gedit /etc/profile

用此命令打开脚本后,在最后添加一行:

export PATH=$PATH:/usr/local/arm/arm-q3/bin

退出编辑后,执行命令:

source /etc/profile

这样,不需要重启linux,此脚本会立即生效。

最后,打开linux源码根目录的Makefile文件,查找CROSS_COMPILE,然后将其改为

CROSS_COMPILE ?= /usr/local/arm/arm-q3/bin/arm-none-linux-gnueabi-

注意:有的Makefile里的CROSS_COMPILE默认没有写完整的路径,而是只写了arm-none-linux-gnueabi-,这样有一个弊端:那就是当你在PATH中同时添加了好几个交叉编译工具包的路径时,由于编译时用的编译器名字都叫arm-none-linux-gnueabi-xxx,可能出现Makefile在PATH中寻找编译器时选择了错误的同名编译器,导致出现一些莫名其妙的错误,比如:

garbage following instruction -- `dmb ish'

2.开发工具和依赖库的安装

此部分分为必需的部分和可选的部分

2.1. 必需部分

这部分主要是编译内核所必需的工具和依赖库:make,gcc,u-boot-tools,32位系统的库,menuconfig的依赖库等。具体需要执行如下命令进行安装:

sudo apt-get install build-essential libncurses-dev lib32z1 u-boot-tools

其中,

build-essential为一个包含了多个开发必备工具和库的包,比如它包含gcc,make。

libncurses-dev为menuconfig需要的库:没有它的话menuconfig将无法执行。

lib32z1为32位系统的库:因为我们使用的是64位的ubuntu系统,而ARM上搭建的linux是32位的,所以需要安装32位系统的库。没有他的话,编译内核的时候会各种报错。

u-boot-tools是构建uImage需要的工具。

注意:对于不同版本的内核,必需的开发工具和依赖库可能会增加。因此,在编译不同版本内核的时候,可能会遇到一些错误,到时候根据错误提示安装对应的工具和依赖库即可。

2.2.可选部分

这部分主要就看个人需要用到怎样的开发工具了,比如ssh,git之类的,根据自己需要安装。

ubuntu20.04.1 64位配置和编译Linux3.0内核

接下来我们就可以配置和编译内核啦。

配置内核我习惯用make menuconfig,毕竟他有图像化界面,也不用一条一条的全部配置一遍,很方便。

需要注意的是,用ubuntu20.04.1 64位编译内核时,会遇到如下报错:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373:

这应该是高版本ubuntu带来的问题,我们需要打开报错中提到的源文件:

/(内核根目录)/kernel/timeconst.pl,然后修改第373行:将!define(@val)改为!@val即可。

之后再用make -j4编译内核,就能一路顺利啦。

如果觉得《ubuntu20.04.1 64位搭建嵌入式linux开发环境》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。