为啥要用docker?
docker的安装步骤就不介绍了,可以去官网查查。
docker pull ubuntu:18.04
docker volume create dataVolume
//创建容器
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
命令。
//该命令在容器内部运行
apt-get update
apt-get upgrade
//该命令在容器内部运行
apt-get install -y vim
//该命令在容器内部运行
apt-get install -y net-tools
//以下命令在容器内部运行
//安装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地址。
//以下命令在容器内部运行
//安装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地址。
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
即可开启服务。
iTop 4412需要的文件如下:
arm-2009q3.tar.bz2
CodeSign4SecureBoot_POP
CodeSign4SecureBoot_SCP
iTop4412_uboot_20180320.tar.gz
iTop4412_Kernel_3.0_20180604.tar.gz
这里,我们使用Filezilla软件将以上软件拷贝到之前创建的docker容器中。
ctrl+s
快捷键打开站点管理器。新站点
,主机配置为宿主机IP192.168.100.186
,端口配置为9022
,协议选择SFTP
,登陆类型选择正常
,用户名root
,输入root
账户密码。连接
,即可连接到之前建立的容器(如果弹出对话框,直接点击确定
)/work/itop
目录下。(/work
下面没有itop
文件夹,需要自己创建一个)此时,docker容器中就包含了我们所需要的所有资源,接下来就需要到docker容器下/work/itop/
目录进行操作了。
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
验证配置是否正确。正常执行结果如下:这个时候,就会遇到一个坑了。 咱们安装的是64位ubuntu系统,而交叉编译工具链式32位的,所以这个时候执行arm-none-linux-gnueabi-gcc -v
总是会出错,就像这样:
明明PATH变量啥的都正确,就是提示找不到文件!!!
解决方案在这:https://blog.csdn.net/bryanwang_3099/article/details/105701328
按照上面的方案搞定之后,执行arm-none-linux-gnueabi-gcc -v
,结果就变成了这样:
tar -xvf iTop4412_uboot_20180320.tar.gz
解压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
编译uboottar -xf iTop4412_Kernel_3.0_20180604.tar.gz
解压源码cd /work/itop/iTop4412_Kernel_3.0
cp config_for_linux_scp_elite .config
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
docker start u1804
docker exec -it u1804 /bin/bash
//在容器内部,执行exit命令
exit
docker stop u1804
docker restart u1804