MPSOC之6——開發流程linux編譯


0.頂層Makefile增加交叉編譯器

頂層makefile:

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

改為:

ARCH		?= arm64
CROSS_COMPILE	?= aarch64-linux-gnu-

1.生成.config

***_defconfig文件一般的芯片都有,找到以后,用如下命令,其實就是拷貝到頂層目錄,並命名為.config,里面包含一堆配置,make時讀取。
***_defconfig文件在 arch/arm64/configs/目錄下

[liuwanpeng@localhost linux]$ make xilinx_zynqmp_defconfig O=./output/
#
# configuration written to .config
#

單獨輸出到其他文件件有助於源碼進行git管理,否則亂的文件。

2.make

[liuwanpeng@localhost linux]$ make LOADADDR=0x8000

默認生成Image,若想生成uImage,需要加上uImage后綴

[liuwanpeng@localhost linux]$ make LOADADDR=0x8000 uImage
make: *** 沒有規則可以創建目標“uImage”。 停止。

2.1 uImage無法生成問題

mpsoc不像ZYNQ,把make uImage集成到makefile里了,可以單獨執行mkimage指令。
mkimage是uboot編譯后,生成的工具,拷貝到/usr/bin里

[liuwanpeng@localhost tools]$ mkimage
Error: Missing output filename
Usage: mkimage -l image
          -l ==> list image header information
       mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
          -A ==> set architecture to 'arch'
          -O ==> set operating system to 'os'
          -T ==> set image type to 'type'
          -C ==> set compression type 'comp'
          -a ==> set load address to 'addr' (hex)
          -e ==> set entry point to 'ep' (hex)
          -n ==> set image name to 'name'
          -d ==> use image data from 'datafile'
          -x ==> set XIP (execute in place)
       mkimage [-D dtc_options] [-f fit-image.its|-f auto|-F] [-b <dtb> [-b <dtb>]] [-i <ramdisk.cpio.gz>] fit-image
           <dtb> file is used with -f auto, it may occur multiple times.
          -D => set all options for device tree compiler
          -f => input filename for FIT source
          -i => input filename for ramdisk file
Signing / verified boot not supported (CONFIG_FIT_SIGNATURE undefined)
       mkimage -V ==> print version information and exit
Use -T to see a list of available image types

在Image所在目錄執行如下命令即可:

 mkimage -n 'xlnx-linux' -A arm64 -O linux -T kernel -C none -a 0x00080000 -e 0x00080000 -d Image uImage

2.2 幾種linux鏡像格式

  • vmlinux 未壓縮內核鏡像文件,
  • zImage zImage是一般情況下默認的壓縮內核映像文件,壓縮vmlinux,加上一段解壓啟動代碼得到,只能從0X0地址運行
  • uImage uImage是u-boot使用bootm命令引導的Linux壓縮內核映像文件格式, 使用工具mkimage(uboot提供此工具)對普通的壓縮內核映像文件(zImage)加工而得。可以由bootm命令從任意地址解壓啟動內核。由於bootloader一般要占用0x0地址,所以,uImage相比zImage的好處就是可以和bootloader共存。

3. dts文件

dts文件在arch/arm64/boot/dts中

make dtbs

可以生成dtb文件,整個目錄都編譯了

make xxx.dtb 

不好用了,具體原因還未定位,估計是makefile體系的問題

可以用dtc命令編譯或反編譯特定的dtb文件

liuwanpeng@liuwanpeng-virtual-machine:~/work/linux/output/arch/arm64/boot/dts/xilinx$ dtc --help
Usage: dtc [options] <input file>

Options: -[qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv]
  -q, --quiet                
	Quiet: -q suppress warnings, -qq errors, -qqq all
  -I, --in-format <arg>      
	Input formats are:
		dts - device tree source text
		dtb - device tree blob
		fs  - /proc/device-tree style directory
  -o, --out <arg>            
	Output file
  -O, --out-format <arg>     
	Output formats are:
		dts - device tree source text
		dtb - device tree blob
		asm - assembler source
  -V, --out-version <arg>    
	Blob version to produce, defaults to 17 (for dtb and asm output)
  -d, --out-dependency <arg> 
	Output dependency file
  -R, --reserve <arg>        
	Make space for <number> reserve map entries (for dtb and asm output)
  -S, --space <arg>          
	Make the blob at least <bytes> long (extra space)
  -p, --pad <arg>            
	Add padding to the blob of <bytes> long (extra space)
  -b, --boot-cpu <arg>       
	Set the physical boot cpu
  -f, --force                
	Try to produce output even if the input tree has errors
  -i, --include <arg>        
	Add a path to search for include files
  -s, --sort                 
	Sort nodes and properties before outputting (useful for comparing trees)
  -H, --phandle <arg>        
	Valid phandle formats are:
		legacy - "linux,phandle" properties only
		epapr  - "phandle" properties only
		both   - Both "linux,phandle" and "phandle" properties
  -W, --warning <arg>        
	Enable/disable warnings (prefix with "no-")
  -E, --error <arg>          
	Enable/disable errors (prefix with "no-")
  -h, --help                 
	Print this help and exit
  -v, --version              
	Print version and exit

例如:
反匯編,由dtb生成dts,反之亦然

dtc -I dtb -O dts -o zynqmp-zcu102.dts zynqmp-zcu102.dtb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM