有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 皋陶 于 2020-8-26 12:31 编辑
目标在 Windows10 环境下,使用Docker构建centos7容器,在容器中搭建RISC-V的交叉编译环境。
主要内容包括:
- Centos7容器的制作;
- 在容器中安装交叉编译器;
Centos7容器的制作- Docker的简单介绍
以往我们制作一个虚拟机,往往在VMware或VirtualBox等软件中,使用 .iso镜像文件构建具有完整操作系统的虚拟机。这种方式制作的虚拟机在运行时资源占用多、冗余步骤多、启动慢。针对以上这些缺点,Linux发展出另外一种虚拟化技术——Linux 容器(Linux Containers,缩写为 LXC)。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势——启动快、资源占用少、体积小。1
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
再说到Docker,Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
- 新建一个目录mydocer,新建一个dockerfile文件。Docker使用这个dockerfile制作出镜像,之后再使用镜像制作出容器。dockerfile可以将一些容器需要的设置(如用户名和密码等)和软件(如wget)部署到镜像中,这样在容器生成后,就不必再手动安装一些常用的软件和配置系统环境了。
- FROM centos
- RUN yum install kde-l10n-Chinese -y
- RUN yum install glibc-common -y
- RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
- RUN export LANG=zh_CN.UTF-8
- RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
- ENV LANG zh_CN.UTF-8
- ENV LC_ALL zh_CN.UTF-8
- RUN yum -y install wget
- RUN rm -rf /etc/yum.repos.d
- RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- RUN yum clean all
- RUN yum install -y openssh-server sudo
- RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
- RUN useradd username
- RUN echo "username:userpasswd" | chpasswd
- RUN echo "username ALL=(ALL) ALL" >> /etc/sudoers
- RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
- RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
- RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
- RUN echo AddressFamily inet >> /etc/ssh/sshd_config
- RUN mkdir /var/run/sshd
- EXPOSE 22
- CMD ["/usr/sbin/sshd", "-D"]
复制代码
生成镜像。在mydocker目录下打开命令行窗口,输入命令:
- ......................
- .....................
- +--[ED25519 256]--+
- | .Bo. o|
- | o . *.oo|
- | . . = . o +|
- | . o + o o.+o|
- | o . S .+* |
- | Eo ..=... o o|
- | ..o..ooo.. .|
- | o . .+= o o |
- | . .ooo+ . .|
- +----[SHA256]-----+
- Removing intermediate container ce77a2e2770f
- ---> 1f97d912fb81
- Step 21/24 : RUN echo AddressFamily inet >> /etc/ssh/sshd_config
- ---> Running in 45e29f163d79
- Removing intermediate container 45e29f163d79
- ---> 297221d56ae8
- Step 22/24 : RUN mkdir /var/run/sshd
- ---> Running in c6a6023ad8c9
- Removing intermediate container c6a6023ad8c9
- ---> 65d1a5968e75
- Step 23/24 : EXPOSE 22
- ---> Running in 46b4de1a81ce
- Removing intermediate container 46b4de1a81ce
- ---> 6a53621785b1
- Step 24/24 : CMD ["/usr/sbin/sshd", "-D"]
- ---> Running in 1feddc96c13a
- Removing intermediate container 1feddc96c13a
- ---> ce883199515c
- Successfully built ce883199515c
- Successfully tagged course_image:latest
- SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
复制代码
使用如下命令查看生成好的镜像信息:
使用镜像生成容器。使用如下命令生成一个容器:
- docker run -d --name container_name -v D:/Windows_share_file:/Linux_share_file -p 10022:22 image_name
复制代码
上面的命令分别中,-d 指定容器运行于前台还是后台,默认为false; --name 指定容器的名字 -v 指定windows和容器之间的共享文件夹,Windows_share_file是windows下的文件夹,Linux_share_file是映射到容器中的文件夹,容器创建成功后,会创建一个/Linux_share_file文件夹;-p 指定了windows和容器之间的端口映射关系。
容器生成后,使用下面的命令查看容器信息:
输出信息如下:
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 899f1314a212 image_name "/usr/sbin/sshd -D" 7 seconds ago Up 4 seconds 0.0.0.0:10022->22/tcp container_name
复制代码
顺便提一下几个常用命令:
- 停止容器:docker stop container_name
- 启动容器:docker start container_name
- 删除容器:docker rm container_name
- 重启容器:docker restart container_name
- 删除镜像:docker image rm container_name
复制代码
- 使用putty登陆容器。分别填入Host name 127.0.0.1和port 10022,点击open,出现容器的ssh登陆界面,登陆成功后,可以去找你的共享目录,查看是否存在,例如,我的共享目录设为/home/xxx/Winshare,显示如下。
到这里,Centos7容器制作完毕。
在容器中安装RISC-V交叉编译器
在Centos7容器中可以安装事先编译编译好的RISC-V交叉编译器,从https://github.com/SI-RISCV/hbird-e-sdk/tree/master/prebuilt_tools下载。也可以从https://github.com/riscv/riscv-gnu-toolchain下载源码自已编译安装(编译方法和交叉编译器介绍参考这里)。一般国内从github上下载网速比较慢,编译时间也比较长,推荐使用第一种方法,本文也使用第一种方法。
- 下载gnu-mcu-eclipse-riscv-none-gcc-7.2.0-4-20180606-1631-centos64.tgz,放到windows下共享目录。
- 将gnu-mcu-eclipse-riscv-none-gcc-7.2.0-4-20180606-1631-centos64.tgz解压到家目录下,得到gnu-mcu-eclipse目录。
- cd ~
- tar -xzvf gnu-mcu-eclipse-riscv-none-gcc-7.2.0-4-20180606-1631-centos64.tgz
复制代码
将RISC-V编译器添加到环境变量中
- cd ~
- vi .bashrc
- 在.bashrc文件最后一行添加:export PATH=$PATH:/home/course_wdz/gnu-mcu-eclipse/riscv-none-gcc/7.2.0-4-20180606-1631/bin
- 保存并退出vi后,执行
- source .bashrc
复制代码
执行下面的命令查看是否安装成功:
- riscv-none-embed-gcc --version
- 如果成功,终端显示:
- riscv-none-embed-gcc (GNU MCU Eclipse RISC-V Embedded GCC, 64-bits) 7.2.0
- Copyright (C) 2017 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制代码
至此,RISC-V交叉编译器在Centos7容器中安装成功了。
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html 本篇完,感谢关注:RISC-V单片机中文网
|