主頁 > 作業系統 > VMware Ubuntu 20.04 LTS 使用Qemu虛擬機u-boot啟動或者配合busybox模擬ARM開發板

VMware Ubuntu 20.04 LTS 使用Qemu虛擬機u-boot啟動或者配合busybox模擬ARM開發板

2021-06-09 15:03:21 作業系統

這里提供相關工具的下載地址

Linux內核下載地址
busybox下載地址
Qemu下載地址
u-boot下載地址

文中使用的版本為Linux-4.9.268、busybox-1.33.0、qemu-5.2.0、u-boot-2021.01-rc4
版本差別不大,應該都沒有問題的

一、busybox制作根目錄,通過鏡像啟動linux內核模擬ARM板

1、編譯linux內核

編譯條件:gcc編譯器,交叉編譯器

sudo apt install gcc
sudo apt install gcc-arm-linux-gnueabi

具體安裝配置見:交叉編譯器安裝使用

清除做過的配置

make clean

image
自定義內核配置,通過空格鍵選擇配置,這里不做修改,采用默認配置,后面可以根據需要再修改,

make menuconfig

image

如果運行make menuconfig出錯,則需要安裝如下的支持包

sudo apt-get install lncurses-dev
sudo apt-get install libncurses5-dev

保存退出后會自動生成.config組態檔

然后創建一個腳本build.sh
輸入下面內容,運行即可編譯

#! /bin/sh
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

image

運行命令,開始編譯,內容比較多,會花一些時間

sudo sh build.sh

image

然后會在原始碼目錄下的arch/arm/boot/檔案夾下生成鏡像Image和zImage

2、編譯busybox

進入到busybox目錄下,編輯Makefile

搜索如下兩個變數,更改成這樣

ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabi-

執行下面命令,使得編譯器生效

source /etc/profile

修改組態檔

make menuconfig

如果出現沒有<curses.h>頭檔案,嘗試安裝如下支持包

sudo apt-get install libncurses5-dev

修改配置完成后,make編譯

image

再make install生成默認檔案_install

image

檔案內容

image

記住這個_install檔案夾位置,制作根目錄的時候會用到

3、編譯安裝qemu

為了更好的使用qemu,安裝前先下載一些安裝包

#必要安裝包
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev

#推薦安裝包
sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-dev libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl1.2-dev libseccomp-dev libsnappy-dev libssh2-1-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.90-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev

#額外安裝包
sudo apt-get install libnfs-dev libiscsi-dev

自帶的qemu可能比較老,這里采用安裝包的方式安裝新版本

解壓后進入qemu檔案夾

這里選擇一種在其他目錄安裝的方式,比較安全,不會向原目錄增加多余的檔案

 # 在qemu根目錄打開終端
 # 準備一個本機debug版本
 mkdir -p bin/debug/native cd bin/debug/native
 # 配置 QEMU 并啟動構建
 ../../../configure --enable-debug

如果提示沒有Ninja,則進行下面的操作

#安裝支持包
sudo apt install re2c
#安裝編譯ninja
git clone git://github.com/ninja-build/ninja.git && cd ninja
./configure.py --bootstrap
#如果提示沒有python,則sudo apt install python
#如果還報錯沒有c++,則安裝sudo apt-get install g++,裝完后再次執行上面的命令
ls   #查看生成的ninja檔案
cp ninja /usr/bin/    #拷貝ninja檔案到/usr/bin/路徑下
#檢查ninja版本
ninja --version
#如果檢查報錯就安裝
sudo apt install ninja-build

image

錯誤解決,再回到出錯的步驟繼續執行

cd ..   #回到native目錄
../../../configure --enable-debug

image

配置完成,然后make編譯

這里有8000多行的編譯,時間會比較長

image

安裝

sudo make install

image

# 回傳到QEMU根目錄
cd ../../..

運行./configure --help 可以獲得幫助資訊

測驗qemu編譯是否正常,輸入命令

bin/debug/native/x86_64-softmmu/qemu-system-x86_64 -L pc-bios

image

彈出QEMU界面,安裝成功,由于還沒有制作根目錄,所以顯示沒有設備

根據界面頂端提示,使用ctrl+alt+g退出輸入界面

可以用qemu-system-arm -machine help命令來查看所支持的開發板

image

4、制作啟動根目錄

自己選擇一個地方創建rootfs目錄

image

在rootfs里面創建下面的這些空目錄(和busybox的_install檔案夾里重復的檔案夾也可以不用創建,馬上要復制過來)

image

(1)完善編譯環境

先將剛剛busybox里生成的_install檔案夾內部的全部內容復制到rootfs檔案夾里,

在rootfs檔案夾內打開終端

sudo cp -r ../../busybox-1.33.0/_install/* ./

命令里的檔案夾路徑根據自己的情況來寫

image

當然lib庫還是不夠的,因為檔案系統運行在arm平臺,所以還需要arm-linux-gnueabi的庫,直接從系統里安裝的交叉編譯器里復制過來,

sudo cp -p /usr/arm-linux-gnueabi/lib/* ./lib

image

接著來完善根目錄檔案

(2)完善設備檔案dev內容

從終端進入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
  • 創建null
sudo mknod -m 666 null c 1 3

image

(3)完善組態檔etc內容

從終端進入etc檔案夾
image

  • 創建inittab
::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#::respawn:-/bin/loginconsole
::askfirst:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
  • 創建fstab
proc    /proc      proc     defaults    0   0
none    /dev/pts   devpts   mode=0622   0   0
mdev    /dev       ramfs    defaults    0   0
sysfs   /sys       sysfs    defaults    0   0
tmpfs   /dev/shm   tmpfs    defaults    0   0
tmpfs   /dev       tmpfs    defaults    0   0
tmpfs   /mnt       tmpfs    defaults    0   0
var     /dev       tmpfs    defaults    0   0
ramfs   /dev       ramfs    defaults    0   0
  • 創建profile
# /etc/profile: system-wide .profile file for the Bourne shells

echo "-----------------------------------"
echo "Mini2440 FileSystem is Ready ..."
echo "-----------------------------------"

USER="`id -un`"
LOGNAME=$USER
#PS1='[\u@\h \W]\# ' #顯示主機名、當前路徑等資訊
PS1='pymeia@Mini2440:\w # ' #顯示主機名、當前路徑等資訊
PATH=$PATH
HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH
  • 創建init.d/rcS
#! /bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin #可執行程式 環境變數
export LD_LIBRARY_PATH=/lib:/usr/lib #元件 環境變數
/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir /var/tmp
/bin/mkdir /var/modules
/bin/mkdir /var/run
/bin/mkdir /var/log
/bin/mkdir -p /dev/pts //telnet服務需要
/bin/mkdir -p /dev/shm //telnet服務需要
#echo /sbin/mdev > /proc/sys/kernel/hotplug//USB自動掛載需要
/sbin/mdev -s //啟動mdev在/dev下自動創建設備檔案節點
/bin/mount -a

echo "-----------------------------------"
echo " welcome to Mini2440 board"
echo "-----------------------------------"
  • 創建group
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:
lpmail:*:8:
news:*:9:
uucp:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sudo:*:27:
  • 創建passwd
root::0:0:root:/:/bin/sh
ftp::14:50:FTP User:/var/ftp:
bin:*:1:1:bin:/bin:

創建var檔案夾,存放日志資訊

sudo ln -s /tmp var/lock
sudo ln -s /tmp var/log
sudo ln -s /tmp var/run
sudo ln -s /tmp var/tmp

5、qemu啟動開發板鏡像

制作根檔案系統鏡像,把rootfs根目錄的內容復制到這個鏡像中,然后用qemu啟動模擬開發板,

方法1

制作磁盤鏡像啟動方式

(1)制作磁盤鏡像img

制作磁盤鏡像并格式化

qemu-img create -f raw disk.img 512M   #生成512M大小的磁盤鏡像
mkfs -t ext4 ./disk.img		#把磁盤鏡像格式化成ext4檔案系統

也可以將其打包成mkdisk.sh腳本,方便再次創建

sudo sh mkdisk.sh
#!/bin/sh
qemu-img create -f raw disk.img 512M
mkfs -t ext4 ./disk.img

image

(2)復制rootfs內容到磁盤鏡像

將rootfs根目錄中所有內容復制到磁盤鏡像中

mkdir tmpfs #創建一個臨時檔案夾,檔案夾與rootfs同級
sudo mount -o loop ./disk.img tmpfs/  #創建掛載點并掛載
sudo cp -r rootfs/* tmpfs/		#復制檔案到鏡像
sudo umount tmpfs		#卸載

也可以打包起來方便更新磁盤內容

sudo sh update.sh
#!/bin/sh
sudo mount -o loop ./disk.img tmpfs/
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs

image

更新期間會將rootfs的內容復制到tmpfs,再洗掉

image

檢查鏡像檔案資訊

file disk.img
(3)啟動開發板
不帶qemu界面

直接在終端啟動,不帶lcd界面

sudo sh runnolcd.sh
#! /bin/sh
qemu-system-arm -M vexpress-a9 -m 512M -dtb ../linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ../linux-4.9.268/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd disk.img

如果遇到拒絕訪問的情況,請授予檔案訪問權限,刪掉磁盤重新創建(直接更新不成功)

image

chmod +x rcS
chmod -R 777 init.d/*
或者授予etc的所有檔案訪問權限
chmod -R 777 etc/

啟動界面如下

image

帶qemu界面

帶lcd界面啟動方式

sudo sh runlcd.sh
#! /bin/sh
qemu-system-arm -M vexpress-a9 -m 512M -dtb ../linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ../linux-4.9.268/arch/arm/boot/zImage -append "root=/dev/mmcblk0 rw console=tty0" -sd disk.img

啟動界面如下

image

【注意】:啟動終端的命令,里面的路徑一定要根據自己創建的檔案夾填寫正確,啟動命令也可以直接在終端輸入,但是比較麻煩,

方法2

制作sd根檔案系統鏡像啟動方式

(1)制作sd卡鏡像

生成虛擬sd卡并格式化為ext格式

sudo sh mksd.sh
#! /bin/sh
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
(2)復制內容到sd鏡像

將虛擬sd卡掛載到/mnt,拷貝rootfs的所有檔案到sd,然后卸載sd

sudo sh update.sh
#! /bin/sh
mount -t ext3 rootfs.ext3 /mnt/ -o loop
cp -r rootfs/* /mnt
umount /mnt

(3)啟動開發板

不帶qemu界面
sudo sh runnolcd.sh
#! /bin/sh
qemu-system-arm -M vexpress-a9 -m 512M -dtb ../linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ../linux-4.9.268/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3
帶qemu界面
sudo sh runlcd.sh
#! /bin/shqemu-system-arm -M vexpress-a9 -m 512M -dtb ../linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ../linux-4.9.268/arch/arm/boot/zImage -append "root=/dev/mmcblk0 rw console=tty0" -sd rootfs.ext3

6、關閉虛擬開發板

方法一:直接關掉終端

方法二:ctrl +a 放手,然后按x

方法三:打開另一個終端輸入

sudo killall qemu-system-arm

二、u-boot啟動Linux內核方式,模擬ARM開發板

1、生成uImage內核映像

我們的目的是:uImage檔案

生成它的步驟是:編譯u-boot生成mkimage--->用mkimage生成uImage

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

這里解釋一下uImage:

Linux內核編譯(make)之后會生成兩個檔案,一個Image,一個zImage,其中Image為內核映像檔案,而zImage為內核的一種映像壓縮檔案,Image大約為4M,而zImage不到2M

而uImage是用mkimage工具根據zImage制作而來的,它是uboot專用的映像檔案,它是在zImage之前加上一個長度為64位元組的“頭”,說明這個內核的版本、加載位置、生成時間、大小等資訊;其0x40之后與zImage沒區別,

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(1)編譯u-boot

修改配置

進入u-boot原始碼目錄,分別進入Makefile和config.mk修改配置

修改頂層Makefile,指定交叉編譯器

CROSS_COMPILE ?= arm-linux-gnueabi-

修改頂層config.mk,指定ARM架構

ARCH := arm
編譯
#配置開發板
make vexpress_ca9x4_defconfig
#編譯u-boot
make –j4

image

如果編譯出錯,缺少如下配置

image

則安裝如下,解決問題

sudo apt install bison flex

如果make -j4報錯可能是上面的配置沒有起到作用,則嘗試如下命令

export CROSS_COMPILE=arm-linux-gnueabi-
export ARCH=arm
make clean
make vexpress_ca9x4_defconfig
make -j4

編譯完成后如圖

image

測驗效果

在u-boot原始碼路徑下,運行u-boot看是否成功

qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 512M

這里由于u-boot還沒有uImage鏡像,讓倒計時結束自動加載會出問題,看到提示后,快速按任意按鍵,停止自動加載,出現下圖,說明編譯成功,

image

(2)拷貝mkimage

編譯完u-boot原始碼,會在tools目錄下生成mkimage,用它可以將zImage轉變成uImage

把u-boot目錄下tools/mkimage 拷貝到/usr/bin目錄下,為了可以執行mkimage相關的命令,

如果不拷貝直接執行命令,你會發現/usr/bin缺少檔案

image

除此之外,還可以,直接命令下載,也會再該/usr/bin目錄下生成mkimage

sudo apt install u-boot-tools

這種方法下載自帶的u-boot-tools不知道會不會出問題,可以嘗試嘗試,

為nfs服務做準備

再生成uImage前,需要nfs配置的修改,重新編譯Linux內核,讓內核支持nfs功能,生成新的zImage,然后再轉化成uImage

修改配置如下,在Linux內核目錄下輸入:make menuconfig

進入File system --->

image

再進入Network File System --->

image

將帶有NFS的都用空格鍵選上

image

選中后如圖

image

保存退出

(3)生成uImage(疑問待解決)

方法一:

直接按照以下命令重新編譯(待驗證,地址也有問題)

 export ARCH=arm
 export CROSS_COMPILE=arm-linux-gnueabi-
 make vexpress_defconfig
 make zImage -j8
 make modules -j8
 make LOADADDR=0x60003000 uImage -j8
 make dtbs

方法二:將編譯生成的zImage轉化成uImage(也是地址問題待解決)

切換到Linux內核目錄下,執行下面命令

mkimage -n 'mini2440' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d  arch/arm/boot/zImage  arch/arm/boot/uImage

引數說明

-n 'mini2440'   #指定鏡像名稱
-A arm          #設定為arm架構
-O linux        #設定作業系統為linux
-T kernel       #設定鏡像型別為kernel
-C none         #設定壓縮型別為none
-a 0x30008000   #指定加載地址為0x30008000
-e 0x30008040   #執行入口地址為0x30008040
-d arch/arm/boot/zImage #指定鏡像資料檔案路徑
arch/arm/boot/uImage    #最終生成的uImage的路徑和檔案名稱

這里直接在zImage旁邊生成uImage

image

image

到此uImage鏡像生成結束

然后將uImage檔案拷貝到tftpboot目錄下(這一步也可以后面再一起做),這個檔案夾是在配置tftp的時候創建的,

sudo cp ../../linux-4.9.268/arch/arm/boot/uImage ./		#路徑根據自己的情況來

image

2、安裝配置nfs服務

在前面我們已經裝好了tftp服務器,但還需要安裝nfs服務

(1)安裝

sudo apt-get install  nfs-kernel-server

image

(2)創建nfs共享目錄,設定權限

sudo chmod 777 ./rootfs

image

(3)添加NFS共享目錄路徑

vi /etc/exports
在/etc/exports添加以下路徑
/home/pymeia/qemu/ARM/ubootA9/rootfs *(rw,sync,no_subtree_check)
其中:
	rw    可讀可寫操作
	sync    記憶體和磁盤上的內容保持同步

	no_root_squash    Linux主機不再將開發板設定為匿名用戶,可以操作檔案讀寫
	注意:Ubuntu20.04,這個檔案里不填這個引數,會報錯,exports檔案里有參考實體說明,只有三個引數

	no_subtree_check    不檢查根檔案系統子目錄檔案

(4)重啟nfs服務

sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart
或者
systemctl restart nfs-kernel-server

(5)檢查nfs是否啟動正常

sudo showmount -e
#顯示全部可以掛載的目錄
sudo /etc/init.d/nfs-kernel-server status	#查看nfs服務的當前狀態
ps -e |grep nfs		#看行程中nfs服務是否啟動

image

(6)nfs使用

自己創建一個目錄當作nfs目錄,然后再/etc/exports中添加路徑,可以把你的程式放到這個目錄下,通過掛載映射到./mnt,./mnt可以再主機上,也可以在開發板上,方便進行代碼的除錯,

在本機localhost上掛載nfs目錄到./mnt,這樣rootfs的內容就映射到了./mnt

image

sudo mount -t nfs localhost:/home/pymeia/qemu/ARM/ubootA9/rootfs ./mnt/
#這里掛載的目錄一定要在/etc/exports里添加,否則掛載無效

image

卸載后,檔案洗掉

umount ./mnt

同理,在開發板上掛載nfs目錄到/mnt(假設主機IP地址為192.168.146.129)

mount -t nfs -o nolock 192.168.146.129:/dev/nfs  /mnt
#其中:-o nolock是去除檔案鎖,否則會報錯

3、安裝配置tftp服務

(1)安裝tftp

sudo apt-get install tftp-hpa tftpd-hpa xinetd

(2)更改組態檔

sudo cp  /etc/default/tftpd-hpa  /etc/default/tftpd-hpa_back	#備份原始設定
sudo gedit /etc/default/tftpd-hpa

填寫自己要創建tftpboot檔案的路徑

image

(3)創建tftp目錄,設定權限

配置好后,到上面填寫的路徑,創建檔案夾,并設定權限

#切換到上面填寫的路徑
sudo mkdir tftpboot
sudo chmod 777 tftpboot

(4)重啟tftp服務,讓其生效

sudo /etc/init.d/tftpd-hpa restart

image

(5)測驗tftp服務是否正常

把需要的檔案如u-boot、dtb、uImage等拷貝到tftpboot檔案夾(后面u-boot啟動要用到)

uImage

cp -r /home/pymeia/qemu/ARM/linux-4.9.268/arch/arm/boot/uImage ./

u-boot

cp -r /home/pymeia/qemu/ARM/ubootA9/u-boot/u-boot ./

vexpress-v2p-ca9.dtb

cp -r /home/pymeia/qemu/ARM/linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./

整理copy.sh

#! /bin/sh
cp -r /home/pymeia/qemu/ARM/linux-4.9.268/arch/arm/boot/uImage ./
cp -r /home/pymeia/qemu/ARM/ubootA9/u-boot/u-boot ./
cp -r /home/pymeia/qemu/ARM/linux-4.9.268/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./

image

tftp 192.168.146.129   #主機ip可以用ifconfig來查看
tftp> get uImage	#獲取檔案,保存到用戶名目錄下
tftp> q	#退出tftp
ps -e | grep "tftp"	#查看 tftp  的行程號

image

可以看到,獲取的檔案和獲取失敗的檔案都會顯示在用戶目錄下

image

4、配置qemu和ubuntu網路橋接功能(這一部分,暫時沒有搞完)

VMware 需要配置成NAT模式, 在VMware的橋接模式下面,目前qemu無法成功連接網路
VMware也不能設定成靜態ip地址,設定成靜態ip地址也是無法連接網路

安裝橋接依賴包

sudo apt install uml-utilities bridge-utils
#bridge-utils    虛擬網橋工具
#uml-utilities   UML(User-mode linux)工具

查看是否tun設備檔案,如果存在說明宿主機的內核支持TAP網路介面

ls /dev/net

image

如果沒有,則要手動創建

sudo mkdir /dev/net
sudo mknod /dev/net/tun c 10 200

加載tun模塊

sudo /sbin/modprobe tun

非常建議更改重要配置的節點時,及時創建虛擬機快照,方便恢復,已經重裝一次,吸取教訓了

下面是大雷區,不要亂用,或者在用之前創建還原快照,否則會直接導致Ubuntu 20.04 LTS失去網路,甚至運氣差點要重裝

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

修改組態檔(重啟生效)

sudo gedit /etc/network/interfaces

添加以下內容

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto ens33
auto br0
iface br0 inet dhcp
bridge_ports ens33

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

添加qemu有關系統腳本

/etc/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

sudo ifconfig br0 192.168.146.129
# 根據自己的實際情況修改 IP地址,注意:uboot 中的 CONFIG_SERVERIP(serverip) 要跟這里一樣

/etc/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

給上面的腳本添加執行權限

sudo chmod +x /etc/qemu*

重啟網路使生效

sudo service network-manager restart

u-boot啟動

修改u-boot組態檔include/configs/vexpress_common.h

sudo gedit include/configs/vexpress_common.h
#define CONFIG_BOOTCOMMAND \
		"tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \
		setenv bootargs 'root=/dev/mmcblk0 console=tty0'; \
		bootm 0x60003000 - 0x60500000;"


#define CONFIG_IPADDR 10.0.2.14
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.146.129

所有配置完成后,開始建立u-boot啟動內核檔案

新建啟動腳本ubootqemu.sh

#! /bin/sh
qemu-system-arm \
	-M vexpress-a9 \
	-kernel u-boot  \
	-nographic  \
	-m 512M  \
	-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
	-sd rootfs.ext3

未完....問題解決后更新

參考文章鏈接:
https://blog.csdn.net/u010344264/article/details/82949143
https://zhuanlan.zhihu.com/p/340362172
https://www.jianshu.com/p/8619a6739040
https://www.cnblogs.com/schips/p/12350122.html
https://blog.csdn.net/wxh0000mm/article/details/90056912

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/285431.html

標籤:Linux

上一篇:淺談linux shell的變數及其基本運算(1)

下一篇:Win10下小米路由器4A百兆版刷Openwrt韌體【圖片詳細版】

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more