RHEL7/Centos7下使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境(2018-12-24更新版)

目录

1 交叉编译环境搭建... 3

1.1 交叉编译器下载... 3

1.2 文件夹重命名... 3

1.3 编辑/etc/profile. 3

1.4 测试环境是否搭建成功... 3

2 RHEL7/Centos7下添加fedora的yum源。... 4

2.1 下载fedora的yum源... 4

2.2 修改fedora.repo、fedora-updates.repo.. 4

2.3 生成fedora的yum源缓存... 5

2.4 测试fedora的yum源是否添加成功。... 5

3 安装qemu. 5

3.1 下载解压qemu. 5

3.2 编译前配置... 5

3.3 编译安装... 6

4 编译U-boot. 6

4.1 下载解压u-boot. 6

4.2修改Makefile、config.mk. 7

4.3修改vexpress_common.h. 7

4.4编译u-boot. 8

4.5拷贝生成文件... 8

5 编译Linux内核... 9

5.1 下载解压linux内核文件... 9

5.2 修改Makefile. 9

5.3 编译内核、模块、dtb文件。... 9

5.4 编译生成。... 10

6 安装配置tftp. 10

6.1 安装tftp. 10

6.2 创建tftp工作目录... 10

6.3 修改tftp配置文件... 10

6.4 配置tftp服务... 11

6.5 关闭系统防火墙... 12

7 安装配置NFS. 12

7.1 安装NFS. 12

7.2 创建NFS工作目录... 12

7.3 修改nfs配置文件... 12

7.4 配置nfs服务... 13

8 使用busybox制作根文件系统... 13

8.1 下载解压busybox. 13

8.2 编译busybox. 13

8.2.1 修改Makefile. 13

8.2.2 编译配置... 14

8.2.3 编译... 14

8.3 制作根文件系统... 14

8.3.1 拷贝busybox命令... 14

8.3.2 创建系统目录... 15

8.3.3拷贝运行库到lib下... 15

8.3.4创建启动脚本文件... 15

8.3.5创建终端设备... 16

8.3.6制作根文件镜像... 17

9 配置qemu与主机网络链接... 17

9.1虚拟机网络配置... 17

9.2创建网桥... 18

9.3修改配置文件... 18

9.4创建qemu-ifup、qemu-ifdown脚本... 19

10 启动qemu. 20

10.1 uImage内核镜像、dtb文件、u-boot文件拷贝。... 20

10.2 创建qemu执行脚本... 20

10.3 执行qemu_start.sh脚本... 20

11 参考... 21

RHEL7/Centos7下使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境

1 交叉编译环境搭建

交叉编译器下载链接:

https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi.tar.xz

1.1 交叉编译器下载

将其下载到/usr目录下并解压。

解压命令:

tar -xvf gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi.tar.xz

1.2 文件夹重命名

解压后会在本地生成gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi文件夹,文件夹名太长,将其重命名为toolchain。

重命名命令:

mv  gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi    toolchain

1.3 编辑/etc/profile

编辑/etc/profile ,在文件最后追加toolchain下的bin目录的绝对路径。

export PATH=$PATH:/usr/toolchain/bin

保存退出,执行 source /etc/profile使改变生效。

1.4 测试环境是否搭建成功

在终端输入arm-后按tab键。出现如下的命令则表示交叉编译环境搭建成功。

arm-linux-gnu-addr2line

arm-linux-gnu-ar

arm-linux-gnu-as

arm-linux-gnu-c++filt

arm-linux-gnu-cpp

arm-linux-gnueabi-addr2line

arm-linux-gnueabi-ar

arm-linux-gnueabi-as

arm-linux-gnueabi-c++

arm-linux-gnueabi-c++filt

arm-linux-gnueabi-cpp

arm-linux-gnueabi-dwp

arm-linux-gnueabi-elfedit

arm-linux-gnueabi-g++

arm-linux-gnueabi-gcc

arm-linux-gnueabi-gcc-7.2.1

2 RHEL7/Centos7下添加fedora的yum源。

2.1 下载fedora的yum源

执行下面的命令进行下载:

(1)fedora.repo
 curl -o /etc/yum.repos.d/fedora.repo http://mirrors.aliyun.com/repo/fedora.repo
2fedora-updates.repo
curl -o /etc/yum.repos.d/fedora-updates.repo http://mirrors.aliyun.com/repo/fedora-updates.repo
 

2.2 修改fedora.repofedora-updates.repo

将文件里所有的$releasever替换成27fedora27的版本号),所有的$basearch替换成x86_64gpgcheck=1改为gpgcheck=0
 

2.3 生成fedora的yum源缓存

yum clean all

yum makecache

 
 

2.4 测试fedora的yum源是否添加成功。

执行yum -y install libfdt libfdt-devel  出现如下信息则表示添加成功。

正在解决依赖关系

--> 正在检查事务

---> 软件包 libfdt.x86_64.0.1.4.6-1.fc27 将被 安装

---> 软件包 libfdt-devel.x86_64.0.1.4.6-1.fc27 将被 安装

--> 解决依赖关系完成

3 安装qemu

直接使用yum -y install qemu便可安装,如果想要安装新的版本,可参看下面手动编译安装qemu。

3.1 下载解压qemu

下载链接:

https://download.qemu.org/qemu-2.11.1.tar.xz

解压:

tar -xvf qemu-2.11.1.tar.xz

3.2 编译前配置

进入上一步解压后的文件夹。执行下面的命令进行编译前配置。

配置命令:

./configure --target-list=arm-softmmu --audio-drv-list=

此时执行会报下面的错误。

ERROR: DTC (libfdt) version >= 1.4.0 not present. Your options:

         (1) Preferred: Install the DTC (libfdt) devel package

         (2) Fetch the DTC submodule, using:

             git submodule update --init dtc

之所以会出错,是因为系统中没有安装libfdt。因为centos的yum源不提供libfdt,所以首先在系统中增加fedora的yum源后(参照第2节),再执行下面的命令安装libfdt。

安装命令:

sudo yum -y install libfdt libfdt-devel

安装后,再执行上面的./configure命令就不会出错了。

3.3 编译安装

make

make install

执行make命令进行编译,编译完成后执行make install命令进行安装。安装完毕后,在终端输入qemu-然后按tab键。出现如下命令列表则表示安装成功。

qemu-ga          qemu-io          qemu-pr-helper

qemu-img         qemu-nbd        qemu-system-arm

执行qemu-system-arm –version出现下面的信息,与我们下载安装的qemu版本一致。

QEMU emulator version 2.11.1

Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

4 编译U-boot

4.1 下载解压u-boot

下载链接:

http://ftp.denx.de/pub/u-boot/u-boot-2018.03.tar.bz2

解压:

tar -xvf  u-boot-2018.03.tar.bz2

4.2修改Makefile、config.mk

(1) Makefile

ifeq ($(HOSTARCH),$(ARCH))

CROSS_COMPILE ?=

endif

修改为:

ifeq ($(HOSTARCH),$(ARCH))

CROSS_COMPILE ?=

endif

CROSS_COMPILE ?=arm-linux-gnueabi-

(2) config.mk

ARCH := $(CONFIG_SYS_ARCH:"%"=%)

修改为:

ARCH := arm

4.3修改vexpress_common.h

修改include/configs/vexpress_common.h文件。通过修改bootargs启动参数。让qemu开发板支持tftp, nfs等服务。开机后能自动通过tftp服务从服务器主机下载uImage内核镜像并通过nfs服务找到服务器主机上的根文件系统。并指定qemu开发板ip地址以及服务器主机地址(参照第9.3节网桥网络配置,服务器地址为网桥的IP地址,开发板IP地址设定在同一网段即可。)

(1)终端启动代码:

在源文件“/* Basic environment settings */”下面增加如下代码。其中172.18.5.139为QEMU模拟的开发板的IP,172.18.5.138为RHEL7服务器系统的IP,需要根据实际环境IP进行修改。

/* 修改bootargs启动参数 2018-04-22 changzehai -------------------- ADD Start -*/

#define CONFIG_BOOTCOMMAND \

        "tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \

        setenv bootargs 'root=/dev/nfs rw \

        nfsroot=172.18.5.138:/home/rootfs,nfsvers=3 init=/linuxrc \

        ip=172.18.5.139 console=ttyAMA0';\

        bootm 0x60003000 - 0x60500000; "



#define CONFIG_IPADDR 172.18.5.139

#define CONFIG_NETMASK 255.255.255.0

#define CONFIG_SERVERIP 172.18.5.138

/* 修改bootargs启动参数 2018-04-22 changzehai -------------------- ADD End   -*/

(2)图形界面启动代码:

如果想要在图形化界面启动,则将上面的console=ttyAMA0 改为console=tty0,然后将qemu启动参数-nographic去掉即可。

特别注意:因为RHEL7/centos7不支持NFS V2版本,而Linux内核默认是NFS V2版本。上面的bootargs参数里如果少了nfsvers=3 (NFS V3版本),则会导致NFS根文件系统挂载失败,出现如下的错误:

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "(null)" or unknown-block(2,0): error -6

Please append a correct "root=" boot option; here are the available partitions:

1f00          131072 mtdblock0  (driver?)

1f01           32768 mtdblock1  (driver?)

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.16.0 #1

[<8001465c>] (unwind_backtrace) from [<800116b4>] (show_stack+0x10/0x14)

[<800116b4>] (show_stack) from [<8045f710>] (dump_stack+0x88/0x98)

[<8045f710>] (dump_stack) from [<8045d8d4>] (panic+0xa0/0x1f8)

[<8045d8d4>] (panic) from [<805ca16c>] (mount_block_root+0x1d0/0x260)

[<805ca16c>] (mount_block_root) from [<805ca304>] (mount_root+0x108/0x110)

[<805ca304>] (mount_root) from [<805ca464>] (prepare_namespace+0x158/0x19c)

[<805ca464>] (prepare_namespace) from [<805c9df8>] (kernel_init_freeable+0x244/0x254)

[<805c9df8>] (kernel_init_freeable) from [<8045be44>] (kernel_init+0xc/0xe8)

[<8045be44>] (kernel_init) from [<8000e3f8>] (ret_from_fork+0x14/0x3c)

---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

4.4编译u-boot

make vexpress_ca9x4_defconfig

make

编译完成后会在当前目录下生成u-boot可执行文件,在tools目录下生成相关工具。将u-boot文件拷贝到tools目录下。

4.5拷贝生成文件

如果漏掉这一步,编译Linux内核为uImage格式时会出现错误,参考第5.3节。

(1) 在/usr目录下新建u-boot目录,将tools下的所有文件拷贝到/usr/u-boot目录下。

(2) 修改/etc/profile文件,将/usr/u-boot追加到PATH环境变量后。如下:

export PATH=$PATH:/usr/toolchain/bin:/usr/u-boot

保存退出,执行 source /etc/profile使改变生效。

(3) 在终端输入mki,然后按tab键,如果出现mkimage命令,则表示拷贝配置成功。

5 编译Linux内核

5.1 下载解压linux内核文件

下载链接:

https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.128.tar.xz

解压:

tar -xvf linux-4.4.128.tar.xz

5.2 修改Makefile

进入上一步解压后的目录,如下所示修改Makefile。

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

修改为:

ARCH            ?=arm

CROSS_COMPILE   ?= arm-linux-gnueabi-           (注:第1节安装的交叉编译工具)

5.3 编译内核、模块、dtb文件。

(1) make vexpress_defconfig

(2)make LOADADDR=0x60003000  uImage      (注:u-boot引导的内核镜像格式为uImage,  并且需要指定uImage的加载地址)

这里会出现如下错误,解决办法参照第4.5节。

"mkimage" command not found - U-Boot images will not be built

make[1]: *** [arch/arm/boot/uImage] 错误 1

(3)make modules

(4)make dtbs     

   

5.4 编译生成。

编译完成后,会在arch/arm/boot下生成uImage文件,在arch/arm/boot/dts下生成我们需要的vexpress-v2p-ca9.dtb文件。

6 安装配置tftp

6.1 安装tftp

yum install -y tftp-server xinetd 

6.2 创建tftp工作目录

在/home下创建tftp工作目录tftpboot,并修改其属性。

mkdir -p /home/tftpboot

chmod 777 /home/tftpboot

6.3 修改tftp配置文件

tftp的配置文件在/etc/xinetd.d/tftp

service tftp

{

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /var/lib/tftpboot

        disable                 = yes

        per_source              = 11

        cps                     = 100 2

        flags                   = IPv4

}

修改为:

service tftp

{

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /home/tftpboot -c

        disable                 = no

        per_source              = 11

        cps                     = 100 2

        flags                   = IPv4

}

重启服务,让修改生效。

systemctl restart  xinetd.service  

systemctl restart  tftp.service

6.4 配置tftp服务

(1) 开放服务

firewall-cmd --add-service=tftp --permanent

(2) 开放69端口

firewall-cmd --add-port=69/tcp --permanent

firewall-cmd --add-port=69/udp --permanent

执行firewall-cmd --reload 命令生效

(3) 开机启动

systemctl enable  xinetd.service  

systemctl enable  tftp.service

6.5 关闭系统防火墙

如果不关闭系统防火墙,会导致qemu与主机无法通信。

防火墙开机关闭

systemctl disable firewalld

开机关闭SELinux

vi /etc/selinux/config
修改
"SELINUX=enforcing"

为"SELINUX=disabled"

7 安装配置NFS

7.1 安装NFS

yum install -y nfs-utils rpcbind

7.2 创建NFS工作目录

在/home下创建nfs工作目录rootfs(根文件系统目录),并修改其属性。

mkdir -p /home/rootfs

chmod 777 /home/rootfs

7.3 修改nfs配置文件

nfs配置文件为: /etc/exports,修改内容为:

/home/rootfs *(rw,sync,no_subtree_check,no_root_squash)

重启服务,让修改生效。

systemctl restart rpcbind.service

systemctl restart nfs-server.service

7.4 配置nfs服务

(1) 开放服务

firewall-cmd --add-service=nfs --permanent

(2) 开放端口

firewall-cmd --add-port=111/tcp --permanent

firewall-cmd --add-port=111/udp --permanent

firewall-cmd --add-port=2049/tcp --permanent

firewall-cmd --add-port=2049/udp –permanent

(3)开机启动

systemctl enable rpcbind.service

systemctl enable nfs-server.service

8 使用busybox制作根文件系统

8.1 下载解压busybox

下载链接:

http://busybox.net/downloads/busybox-1.28.3.tar.bz2

解压:

tar -xvf busybox-1.28.3.tar.bz2

8.2 编译busybox

8.2.1 修改Makefile

CROSS_COMPILE ?=

修改为:

CROSS_COMPILE ?= arm-linux-gnueabi-

ARCH ?= $(SUBARCH)

修改为:

ARCH ?= arm

8.2.2 编译配置

make defconfig

make menuconfig →  Settings  ---> [ ] Build static binary (no shared libs) (NEW)

选中后[*] Build static binary (no shared libs) 保存退出。

输入menuconfig时可能会出现下面的错误:

HOSTLD  scripts/kconfig/mconf

HOSTCC  scripts/kconfig/lxdialog/checklist.o

In file included from scripts/kconfig/lxdialog/checklist.c:24:0:

scripts/kconfig/lxdialog/dialog.h:31:20: 致命错误:curses.h:没有那个文件或目录

 #include CURSES_LOC

这是因为系统缺少ncurses,只需执行以下命令即可

yum install ncurses-devel

8.2.3 编译

make

make install

编译安装完成后会生成_install目录。

8.3 制作根文件系统

8.3.1 拷贝busybox命令

将第9.2.3节生成的_install目录下的全部文件拷贝到/home/rootfs目录(nfs工作目录)下。

cp -rp  _install/*   /home/rootfs

8.3.2 创建系统目录

进入到/home/rootfs下,创建linux常用目录。

cd /home/rootfs

mkdir  etc  lib  dev  tmp  sys  var  proc

8.3.3拷贝运行库到lib下

从交叉编译工具的运行库目录拷贝所有库文件到lib目录下。

cd /home/rootfs

cp -rp /usr/toolchain/arm-linux-gnueabi/lib/*  lib

8.3.4创建启动脚本文件

进入etc目录。创建inittab、init.d\rcS、fstab、profile启动脚本文件,脚本内容如下所示,并修改属性为可执行。

cd /home/rootfs/etc

touch inittab

mkdir init.d

touch init.d/rcS

touch fstab

touch profile

inittab内容:

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

fstab内容:

proc    /proc   proc    defaults        0       0
tmpfs   /tmp    tmpfs   defaults        0       0
sysfs   /sys    sysfs   defaults        0       0
tmpfs   /dev    tmpfs   defaults        0       0
var     /dev    tmpfs   defaults        0       0
ramfs   /dev    ramfs   defaults        0       0

profile内容:

PS1='changzehai@vexpress-a9:\w# '
export PS1

init.d/rcS内容:

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

LD_LIBRARY_PATH=/lib
export LD_LIBRARY_PATH

mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mdev -s
mkdir -p /var/lock

echo "-----------------------------------------------"
echo " Welcome to changzehai's A9 vexpress board     "
echo "-----------------------------------------------"

修改为可执行文件:

chmod 777 inittab

chmod 777 fstab

chmod 777 profile

chmod 777 init.d/rcS

8.3.5创建终端设备

进入/home/rootfs/dev目录下,执行下列命令,创建终端设备。

sudo mknod -m 666 tty1 c 4 1  

sudo mknod -m 666 tty2 c 4 2  

sudo mknod -m 666 tty3 c 4 3  

sudo mknod -m 666 tty4 c 4 4

sudo mknod  -m 666 console c 5 1

sudo mknod -m 666 null c 1 3

8.3.6制作根文件镜像

生成镜像:

dd if=/dev/zero of=rootfs.ext3 bs=1M count=256

格式化为ext3文件系统

mkfs.ext3 rootfs.ext3

从rootfs目录拷贝文件到系统镜像中

sudo mount -t ext3 rootfs.ext3 /mnt

sudo cp -rp /home/rootfs/* /mnt

sudo umount /mnt

9 配置qemu与主机网络链接

9.1虚拟机网络配置

打开虚拟机,点击“编辑”---“虚拟网络编辑器”  点击“更改设置”就可以看到桥接模式,其中桥接模式选项有多个,这里你可以选择基于以太网的还是无线局域网的。虚拟机的ip地址要与你选择的以太网还是 无线网的ip段对应(即:ip地址的前三部分要一致)。

我这里选择无线局域网,主机网络配置如下, 则虚拟机的网络配置要跟主机网络配置对应。如下:

主机

无线局域网适配器 WLAN:

   DNS  . . . . . . . . . . . . . . :  172.18.3.80

   IPv4 地址 . . . . . . . . . . . . : 172.18.8.36

   子网掩码  . . . . . . . . . . . . : 255.255.255.0

   默认网关. . . . . . . . . . . . . : 172.18.8.254

虚拟机

   DNS  . . . . . . . . . . . . . . :  172.18.3.80

   IPv4 地址 . . . . . . . . . . . . : 172.18.8.138

   子网掩码  . . . . . . . . . . . . : 255.255.255.0

   默认网关. . . . . . . . . . . . . : 172.18.8.254

然后再点击“虚拟机”---“设置”,点击“网络适配器”,选择右边的“桥接模式”选项。

然后在虚拟机中Ping主机的IP,能ping通表示虚拟机网络配置成功。

9.2创建网桥

brctl addbr br0                     #添加br0这个bridge

brctl addif br0 ens33               #将br0与ens33绑定起来

brctl stp br0 on                    #将br0设置为启用STP协议

9.3修改配置文件

在/etc/sysconfig/network-scripts目录下创建br0网桥的配置文件,并修改ens33的配置文件。

注意:一定要将备份的配置文件,比如ifcfg-br0.20181221、ifcfg-ens33.20181221之类的从/etc/sysconfig/network-scripts目录下移走,不然这些配置文件的内容也会生效,导致修改无效。

创建br0的配置文件ifcfg-br0,内容如下,其中网络参数与第9.1节中虚拟机的网络配置一致。

TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.18.8.138
NETMASK=255.255.255.0
GATEWAY=172.18.8.254
DNS1=172.18.3.80

修改ens33的内容如下:

TYPE=Ethernet
BOOTPROTO=none
DEVICE= ens33
ONBOOT=yes
BRIDGE=br0

重启网络服务

systemctl restart network

执行brctl show命令,如果出现如下信息,表示网桥配置成功。

bridge name                  bridge id                        STP enabled                 interfaces

br0                                 8000.000c29d591f0      no                                  ens33

9.4创建qemu-ifup、qemu-ifdown脚本

在/etc 下创建qemu-ifup、qemu-ifdown脚本。脚本内容如下所示。

qemu-ifup内容:

 #!/bin/sh

echo sudo tunctl -u $(id -un) -t $1

sudo tunctl -u $(id -un) -t $1

echo sudo ifconfig $1 0.0.0.0 promisc up

sudo ifconfig $1 0.0.0.0 promisc up

echo sudo brctl addif br0 $1

sudo brctl addif br0 $1

echo brctl show

brctl show

qemu-ifdown内容:

#!/bin/sh

echo sudo brctl delif br0 $1

sudo brctl delif br0 $1

echo sudo tunctl -d $1

sudo tunctl -d $1

echo brctl show

brctl show

:

10 启动qemu

10.1 uImage内核镜像、dtb文件、u-boot文件拷贝。

将第5.4节生成的uImage内核镜像,vexpress-v2p-ca9.dtb文件以及第4.3节生成的u-boot文件拷贝到/home/tftpboot(tftp工作目录)目录下。

cp  -rp  linux-4.4.128/arch/arm/boot/uImage  /home/tftpboot

cp  -rp  linux-4.4.128/arch/arm/boot/dts/vexpress-v2p-ca9.dtb  /home/tftpboot

cp  -rp  u-boot-2018.03/u-boot  /home/tftpboot

10.2 创建qemu执行脚本

在/home/tftpboot目录下创建qemu_start.sh脚本,内容如下所示:

终端启动:

qemu-system-arm \

        -M vexpress-a9 \

        -m 512M \

        -kernel  u-boot\

        -nographic \

        -net nic, -net tap

图形界面启动:

qemu-system-arm \

        -M vexpress-a9 \

        -m 512M \

        -kernel  u-boot-lcd\

        -net nic, -net tap

u-boot-lcd源代码与u-boot不一样,参照第4.3节。

图形启动若卡在VNC server running on ::1:5901,使用下面的方法解决:

1) 安装SDL开发库
# yum install SDL-devel

2) 重新编译QEMU
# ./configure –target-list=x86_64-softmmu

执行以上指令后,可以从输出中看到:SDL supportyes
# make
# make install

10.3 执行qemu_start.sh脚本

用root权限执行qemu_start.sh脚本,出现以下信息,表示成功挂载NFS根文件系统,进入开发板linu系统。

#0: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 30

VFS: Mounted root (nfs filesystem) on device 0:13.

Freeing unused kernel memory: 288K

nfs: server 192.168.1.100 not responding, still trying

nfs: server 192.168.1.100 OK

-----------------------------------------------

 Welcome to changzehai's A9 vexpress board

-----------------------------------------------

Please press Enter to activate this console.

changzehai@vexpress-a9:/# ls

changzehai@vexpress-a9:/# ls

bin      etc      linuxrc  sbin     tmp      var

dev      lib      proc     sys      usr

至此,成功完成RHEL7/Centos7下使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境。

11 参考

主要参考下面的王利涛老师的《使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境视频课程》,非常感谢王利涛老师分享这么好的学习视频,给我以极大的帮助。也希望大家能去看看,会有很多收获。

王利涛老师的视频课程链接:

http://edu.51cto.com/course/10445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值