欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

程序员文章站 2022-03-18 09:39:48
嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)文章目录嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)-1. 前言0. 环境1. 需求分析2. 基本服务搭建2.1 镜像2.2 volume2.3 容器2.4 软件源更新2.5 vim安装2.6 net-tools安装2.7 ssh-server搭建2.8 nfs-server搭建2.9 创建服务开启脚本3. 嵌入式编译环境搭建(基于iTop 4412)3.1 Filezilla拷贝文件3.1 交叉编...

嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

-1. 前言

为啥要用docker?

  • 据说docker挺火,尝试一下“新”技术(好多年了…)
  • 相对于VMware虚拟机,docker容器占用空间少,启动/关闭速度特别快,一秒搞定。
  • 闲的…

docker的安装步骤就不介绍了,可以去官网查查。

0. 环境

  • 宿主机:win10专业版,64位
  • 宿主机IP地址:192.168.100.186
  • docker:19.03.8
  • docker image:ubuntu 18.04

1. 需求分析

  • 基于ubuntu
  • ssh支持,端口22(默认)
  • nfs支持,端口2049(默认),9999(9999端口需要配置进行强行指定)
  • vim
  • net-tools
  • 交叉编译工具链、源码

2. 基本服务搭建

2.1 获取镜像

docker pull ubuntu:18.04

2.2 创建volume

docker volume create dataVolume

2.3 创建并打开容器

//创建容器
docker run -itd --name u1804 --privileged=true -p 9022:22 -p 9049:2049 -p 9999:9999 -v dataVolume:/work ubuntu:18.04

//进入容器
docker exec -it u1804 /bin/bash

创建容器时,容器内部的ssh端口22映射到宿主机的9022,nfs端口2049映射到宿主机的9049,mountd端口9999映射到宿主机的9999,因此在使用ssh和nfs服务时,需要注意指定对应端口。

在容器内部,想要退出容器时,可以直接执行exit命令。

2.4 软件源更新

//该命令在容器内部运行
apt-get update
apt-get upgrade

2.5 vim安装

//该命令在容器内部运行
apt-get install -y vim

2.6 net-tools安装

//该命令在容器内部运行
apt-get install -y net-tools

2.7 ssh-server搭建

//以下命令在容器内部运行

//安装server服务
apt-get install -y openssh-server

//开启服务
/etc/init.d/ssh start

//查看是否正常启动
ps -e | grep ssh

编辑/etc/ssh/sshd_config文件,将PermitRootLogin prohibit-password前面的注释符#去掉,并改为PermitRootLogin yes

//以下命令在容器内部运行
//重启服务
service ssh restart
//以下命令在容器内部运行
//设置ssh密码
passwd root

使用secureCRT或其他工具连接192.168.100.186:9022验证ssh功能是否正常。

注意:192.168.100.186是docker所在的宿主机的IP地址。

2.8 nfs-server搭建

//以下命令在容器内部运行
//安装nfs server服务
apt-get install -y nfs-kernel-server

修改/etc/exports文件,在文件末尾添加/work *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

修改/etc/default/nfs-kernel-server文件,将RPCMOUNTDOPTS="--manage-gids"修改为RPCMOUNTDOPTS="--manage-gids --port 9999"

//以下命令在容器内部运行
//使配置文件的修改生效
exportfs -r

//启动rpcbind服务
service rpcbind start

//重启nfs服务
service nfs-kernel-server start

在客户端使用如下命令挂载验证:

mount -t nfs -o nolock,vers=3,port=9049,mountport=9999 192.168.100.186:/work /mnt

注意:192.168.100.186是docker所在的宿主机的IP地址。

2.9 创建服务开启脚本

docker容器在重启之后,ssh和nfs等服务并不会自动开启,为了操作方便,我就写了个脚本。执行vim /bin/start_server创建脚本,并添加如下内容:

#!/bin/bash

/etc/init.d/ssh restart
service rpcbind restart
service nfs-kernel-server restart

为脚本添加可执行属性:chmod +x /bin/start_server

以后重启容器后,直接执行start_server即可开启服务。

3. 嵌入式编译环境搭建(基于iTop 4412)

3.1 Filezilla拷贝文件

iTop 4412需要的文件如下:

  • arm-2009q3.tar.bz2
  • CodeSign4SecureBoot_POP
  • CodeSign4SecureBoot_SCP
  • iTop4412_uboot_20180320.tar.gz
  • iTop4412_Kernel_3.0_20180604.tar.gz

这里,我们使用Filezilla软件将以上软件拷贝到之前创建的docker容器中。

  • 打开Filezilla软件后,使用ctrl+s快捷键打开站点管理器。

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

  • 点击新站点,主机配置为宿主机IP192.168.100.186,端口配置为9022,协议选择SFTP,登陆类型选择正常,用户名root,输入root账户密码。

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

  • 点击连接,即可连接到之前建立的容器(如果弹出对话框,直接点击确定

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

  • 将iTop 4412需要使用的文件全部拷贝到容器的/work/itop目录下。(/work下面没有itop文件夹,需要自己创建一个)

此时,docker容器中就包含了我们所需要的所有资源,接下来就需要到docker容器下/work/itop/目录进行操作了。

3.1 交叉编译工具链

  • 执行tar -xvf arm-2009q3.tar.bz2解压。
  • 修改/root/.bashrc,在文件的最后添加如下代码:
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=$PATH:/work/itop/arm-2009q3/bin
  • 执行source /root/.bashrc命令使配置生效。
  • 分别执行echo $ARCH, echo $CROSS_COMPILE, echo $PATH验证配置是否正确。正常执行结果如下:

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

这个时候,就会遇到一个坑了。 咱们安装的是64位ubuntu系统,而交叉编译工具链式32位的,所以这个时候执行arm-none-linux-gnueabi-gcc -v总是会出错,就像这样:

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

明明PATH变量啥的都正确,就是提示找不到文件!!!

解决方案在这:https://blog.csdn.net/bryanwang_3099/article/details/105701328

按照上面的方案搞定之后,执行arm-none-linux-gnueabi-gcc -v,结果就变成了这样:

荐
                                                        嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)

3.2 uboot编译

  • 执行tar -xvf iTop4412_uboot_20180320.tar.gz解压
  • 切换到uboot源码目录:cd /work/itop/iTop4412_uboot
  • 执行apt-get install -y make安装make工具
  • 打开Makefile文件,搜索ifeq ($(ARCH),arm),注释掉紧邻着的CROSS_COMPILE定义语句,改成CROSS_COMPILE = arm-none-linux-gnueabi-,修改后,代码如下:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-none-linux-gnueabi-
endif
  • 执行./build_uboot.sh SCP_1GDDR编译uboot

3.3 Linux Kernel编译

  • 执行tar -xf iTop4412_Kernel_3.0_20180604.tar.gz解压源码
  • 切换到源码目录:cd /work/itop/iTop4412_Kernel_3.0
  • 创建配置文件:cp config_for_linux_scp_elite .config
  • 修改Makefile,将CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-改为CROSS_COMPILE ?= arm-none-linux-gnueabi-
  • 修改kernel/timeconst.pl文件第373行,将if (!defined(@val)) {改为if (!(@val)) {
  • 编译内核:make zImage

4. 常用docker操作

4.1 启动docker容器

docker start u1804

4.2 进入docker容器

docker exec -it u1804 /bin/bash

4.3 退出docker容器

//在容器内部,执行exit命令
exit

4.4 停止docker容器

docker stop u1804

4.5 重启docker容器

docker restart u1804

本文地址:https://blog.csdn.net/w0801101117/article/details/107345248