欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Linux配置、編譯和移植以及GDB調(diào)試-創(chuàng)新互聯(lián)

2022.2.12.-10

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對服務(wù)器租用等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

本文闡述拿到Linux源碼之后,如何對其進行配置、編譯,讓Linux跑到目標硬件環(huán)境上。

  1. 移植三板斧之一:配置和編譯
  2. 移植三板斧之二:bootloader-uboot
  3. 移植三板斧之三:根文件系統(tǒng)-busybox
  4. 磁盤鏡像制作(移植三板斧之隱藏的四)
  5. qemu仿真和debug

閱讀建議:
如果你關(guān)心linux內(nèi)核編譯和調(diào)試,只用看1和5。
如果你關(guān)注Linux移植,需要全看,特別要注意步驟4。


1. 為目標板編譯Linux鏡像

linux中,存在多種配置方式,這些方式都是圖形化給普通人看的:

  1. menuconfig
  2. xconfig
  3. nconfig
  4. gconfig

這些不同的配置方式原理是相似的

在Linux倉庫里已經(jīng)適配的開發(fā)板

如果要用的開發(fā)版已經(jīng)在Linux倉庫里了,可以先使用defconfig,選擇開發(fā)板的默認配置,然后在此基礎(chǔ)上使用圖形化的配置方法進行個性化配置。

方法如下進入到Linux代碼目錄下,進行配置:

make ARCH=arm vexpress_defconfig
make ARCH=arm menuconfig
# 還可以使用 make ARCH=arm nconfig/xconfig/gconfig

ARCH請選擇Linux目錄arch子目錄下的名稱,如果不指定arm,則會自動檢測當前的體系結(jié)構(gòu),基本上都是x86.
默認的配置文件請選擇對應(yīng)的arch目錄下的configs文件夾下的文件
在這里插入圖片描述

Linux倉庫中沒有的開發(fā)板

如果倉庫里沒有我們想要的開發(fā)板,可以直接采用menuconfig進行逐一配置。

make ARCH=arm menuconfig
# 還可以使用 make ARCH=arm nconfig/xconfig/gconfig

本文認為更靠譜、更快速的方式是找一個倉庫中已有的開發(fā)板,復(fù)制一份其defconfig,即建立一個自定義的defconfig進行集中修改,然后再使用menuconfig進行修改。

編譯配置好的Linux

編譯的前提,一定是通過前面的配置,生成了.config,這是會影響到各個功能模塊的選擇。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

編譯好之后,會得到vmlinux,這是一個elf格式的可執(zhí)行文件。

2. Bootloader

為什么要有Bootloader?
vmlinux的入口地址是0x80008000,不是0x0或者某個所有硬件都遵循的地址,所以這個elf并不能夠直接運行,而是需要一個軟件將其搬移到正確的位置,然后將控制權(quán)交給它。
在這里插入圖片描述

如何編譯uboot

uboot的編譯和配置過程與linux相似(configs文件夾提前了),本小節(jié)直接給出編譯vexpress的Uboot的過程。
在這里插入圖片描述

git clone https://github.com/u-boot/u-boot.git
cd u-boot
make ARCH=arm vexpress_ca9x4_defconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

編譯結(jié)束之后,在根目錄下,會生成u-boot,這是一個elf文件
在這里插入圖片描述

3. 根文件系統(tǒng)

根文件系統(tǒng)可以提供應(yīng)用代碼存儲的地方,在linux啟動之后,從文件系統(tǒng)中加載應(yīng)用程序進行執(zhí)行。此外,還可以存儲驅(qū)動module,存儲Linux命令的鏡像等等,實際上根文件系統(tǒng)相當于提供了一個與Linux內(nèi)核交互的方式。

wget https://www.busybox.net/downloads/busybox-1.36.0.tar.bz2

tar -xvf busybox-1.36.0.tar.bz2
cd busybox-1.36.0

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
mkdir myrootfs
make install CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm CONFIG_PREFIX=myrootfs -j20

編譯之后,可以在指定的文件夾下面看到被寫入了四個文件(夾)。
編譯之后也會生成一個elf文件
可以看見,以及生成了很多l(xiāng)inux下的命令,這樣我們就能在目標板上使用linux命令了。

在這里插入圖片描述

4. 創(chuàng)建磁盤鏡像
# 創(chuàng)建硬盤鏡像,block_size=1M,1024個block, 即1GB硬盤
dd if=/dev/zero of=rootfs.ext3 bs=1M count=1024
# 將這個硬盤進行分區(qū)
sgdisk -n 0:0:+10M -c 0:kernel rootfs.ext3
sgdisk -n 0:0:0 -c 0:rootfs rootfs.ext3

# 將這個硬盤鏡像,映射到文件夾,方便做操作
losetup -f
sudo losetup /dev/loop1 rootfs.ext3 
sudo partprobe /dev/loop1
sudo mkfs.ext3 /dev/loop1p1
sudo mkfs.ext3 /dev/loop1p2
sudo mount -t ext3 /dev/loop1p1 p1
sudo mount -t ext3 /dev/loop1p2 p2
# 將Linux壓縮鏡像和對應(yīng)的dtb復(fù)制到第一分區(qū)
sudo cp linux_old1/arch/arm/boot/zImage p1
sudo cp linux_old1/arch/arm/boot/dts/vexpress-v2p-ca9.dtb p1
# 將根文件系統(tǒng)放到第二分區(qū),并且創(chuàng)建4個tty設(shè)備文件
sudo cp -raf busybox-1.36.0/myrootfs/* p2
sudo mkdir dev
cd dev
sudo mknod tty1 c 4 1
sudo mknod tty2 c 4 2
sudo mknod tty3 c 4 3
sudo mknod tty4 c 4 4

#硬盤鏡像創(chuàng)建結(jié)束,接觸映射,這時所有的文件都寫入到rootfs.ext3這個硬盤鏡像中了
cd ../.. #回到主目錄
sudo umount p1 p2
sudo losetup /dev/loop1
sudo losetup -d /dev/loop1
5. qemu仿真和GDB調(diào)試 方法一:直接調(diào)試內(nèi)核

在啟動之前,需要首先確定內(nèi)核的入口地址,本文是0x80008000,需要在啟動qemu時,讓loader把內(nèi)核鏡像加載到這個地址。

在這里插入圖片描述

啟動qemu模擬器,并且暫停運行,等待GDB接入(-s -S).

qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage-dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append "console=ttyAMA0" -nographic -s -S -device loader,addr=0x80008000,cpu-num=0

# Boot Image or Kernel specific:
# -bios file      set the filename for the BIOS
# -pflash file    use 'file' as a parallel flash image
# -kernel bzImage use 'bzImage' as kernel image
# -append cmdline use 'cmdline' as kernel command line
# -initrd file    use 'file' as initial ram disk
# -dtb    file    use 'file' as device tree image
# -S              freeze CPU at startup (use 'c' to start execution)
# -s              shorthand for -gdb tcp::1234
# -device loader,addr=  The loader device allows the CPU’s PC to be set from the command line。

然后使用gdb-multiarch進行調(diào)試

sudo apt install gdb-multiarch #如果沒有的話執(zhí)行這句話

gdb-multiarch vmlinux

(gdb) target remote:1234
(gdb) layout src

之后可以看到linux的源碼被加載到gdb中了:
在這里插入圖片描述

方法二:全流程模擬

這種方式更加復(fù)雜,從bootloader到linux內(nèi)核再到加載根文件系統(tǒng)。這更加符合實際的流程,因此要先制作磁盤鏡像,也就是把Linux內(nèi)核和根文件系統(tǒng)放到磁盤中(flash),然后u-boot從磁盤中加載內(nèi)核,內(nèi)核再從磁盤中加載根文件系統(tǒng)。

qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot/u-boot -append "root=/dev/mmcblk0 console=ttyAMA0 rw init=/linuxrc" -sd rootfs.ext3 -serial stdio

在自動boot前,按空格鍵,進入手動模式,然后在qemu上的Linux下輸入:

mmc dev 0
part list mmc 0
load mmc 0:1 0x60008000 zImage
setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait earlycon console=tty0 console=ttyAMA0 init=/linuxrc ignore_loglevel'

如果要u-boot自動加載內(nèi)核鏡像,需要去配置u-boot的makefile重新編譯u-boot. 有需要可以留言。
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章題目:Linux配置、編譯和移植以及GDB調(diào)試-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://chinadenli.net/article6/dgjjog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作動態(tài)網(wǎng)站、網(wǎng)頁設(shè)計公司、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計公司、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)