A. 單獨編譯內核和設備樹
source /opt/fsl-imx-xwayland/4.19-warrior/environment-setup-aarch64-poky-linux
export ARCH=arm64
make -j 16
生成的Image 和dtb在下面的路徑
~/imx-yocto-bsp/build-imx8mmevk/tmp/work/imx8mmevk-poky-linux/linux-imx/4.19.35-r0/git/arch/arm64/boot
B. zynqmp 怎麼將linux系統下載到emmc
1,vivado硬體配置,要選擇EMMC代表的SD1;
2,編譯petalinux:執行petalinux-config。
(1)選擇Subsystem AUTO Hardware Setting
-> Advanced bootable images storage settings
->boot image settings;
選擇primary flash,這里是將BOOT.bin設置為從qspi flash啟動
(2)選擇Subsystem AUTO Hardware Setting
-> Advanced bootable images storage settings
->kernel image settings;
選擇primary sd,進入後我們看到這里實際就是設置image.ub的存放區域。
(3)選擇Image Packaging Configuration,設置啟動啟動文件系統所在位置;
在設置啟動方式的時候,如下兩張圖這樣設置讀取根文件系統的位置/dev/mmcblk1p2。
(4)設置你的驅動然後編譯,依次執行:petalinux-config -c kernel;petalinux-config -c rootfs;
petalinux-build;petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force;
3,做之前先分區(把EMMC分區),先做一個SD卡啟動的petalinux文件,
petalinux系統在zynq上面啟動起來以後就進行如下分區:即是mmcblk1分為mmcblk1p1和mmcblk1p2
具體步驟如下:
(1) 把EMMC進行分區,執行命令: fdisk /dev/mmcblk1
(2)使用n命令,添加一個新的分區
Command (m for help): n
Command action
e extended
p primary partition (1-4)
選擇p,添加主分區
,(3)選擇分區號,選擇1,
Partition number (1-4): 1 // 選擇分區號
First cylinder (1-238592, default 1): Using default value 1 // 選擇分區的第一個柱面,選擇1
Last cylinder or +size or +sizeM or +sizeK (1-238592, default 238592): Using default value 238592 // 選擇最後一個柱面
注意:1-238592,first要選第一個數,last要選擇的比238592小,其中1024就是表示1M
(4)使用t命令,設置分區格式
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)
(5)使用w命令,保存配置,必須保存配置
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
(6)使用對應文件系統工具對分析進行格式化(只能在debian裡面才能識別命令)
mkfs.fat /dev/mmcblk1p1 設置為fat32格式
mkfs.ext4 /dev/mmcblk1p2設置為ext4格式
注意:執行完w命令然後才算分區成功,執行完mkfs命令才算格設置內存屬性成功。
以上分區完成後,可以使用p命令,顯示分區信息;也可以使用用d命令表示刪除分區
Command (m for help): p
Disk /dev/mmcblk0: 7818 MB, 7818182656 bytes
4 heads, 16 sectors/track, 238592 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 238592 7634936 83 Linux
(7)執行這句:mkdosfs -F 32 /dev/mmcblk0p1
當然,可以重復上述步驟,多分幾個區,用來存放不同的狀態:
FLASH要要用來存放BOOT.bin
第一個分區用來存放image.ub或者設備樹(比如uImage和devicetree.dtb)等文件;--可以設置為128MB
第二個分區用來存放用戶數據(比如可執行程序);可以設置為2048MB
第三個分區用來存放程序執行需要的庫文件(opencv的庫,qtcreator庫,相機庫,視頻編碼解碼庫等);剩餘的1個多GB
4,把系統同步到ext4裡面
先把sd卡裡面系統掛載進來 :mount /dev/mmcblk0p2 /mnt
再把剛剛弄好的系統掛進來: mount /dev/mmcblk1p2 /tmp , 然後cd /mnt
然後進入把SD卡裡面的系統同步到emmc裡面:rsync -av ./* /tmp ,時間有點久,直到結束為止。
(要是不用SD卡也可以掛載U盤,解壓,然後進行系統同步到EMMC所掛載的地方/tmp)
5,然後將BOOT.BIN和image.ub燒錄到QSPI-FLASH中
首先擦除QSPI-FLASH:flash_eraseall /dev/mtd0
存放BOOT.bin到flash : flashcp BOOT.bin /dev/mtd0
此處若是將image.ub寫入emmc的FAT分區中(不存放到flash中),先使用mount掛載eMMC的FAT分區,
然後將image.ub使用cp指令拷貝進 /mnt/mmcFat即可,也就是把uImage 拷貝到 /dev/mmcblk1p1;
進入uImage所在目錄,然後執行 cp uImage /tmp;也就是把uImage存放到了 /dev/mmcblk1p1裡面。
6,最後斷電拔出SD卡,將撥碼開關設置為flash啟動,就能看到petalinux啟動起來;
7,報錯及其解決辦法
————————————————
版權聲明:本文為CSDN博主「寒聽雪落」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangjie36/article/details/104740448/
C. 飛思卡爾的IMX6Q晶元好用嗎有核心板+底板的嗎
迅為IMX6Q開發板獨立文檔和程序源碼匯總158個
迅為IMX6開發板支持五種系統Android4.4/6.0/7.1系統;Linux + Qt4.7/5.7系統; Ubuntu12.04/16.04系統;Debian 9.9 系統;Yocto系統(4.1.15-krogoth)。
處理器兼容單核、雙核、工業級、汽車級、IMX6Q最新PLUS版本可根據需求更換。
iTOP-開發板-ssh常見問題以及解決方法.pdf
iTOP-開發板-串口控制台無法使用vi編輯器解決辦法.zip
iTOP-開發板-can測試工具使用資料.zip
iTOP-開發板-Qt和mini文件系統無法保存文件的解決辦法.pdf
iTOP-IMX6-SATA硬碟測試.pdf
iTOP-IMX6-Android系統開啟adb.pdf
iTOP-IMX6-QtE4.7-Uart_V1.0.rar
iTOP-iMX6-驅動-單獨編譯內核驅動.zip
iTOP-iMX6-驅動-以模塊的方式編譯內核驅動.pdf
iTOP-iMX6-TF卡開機自動燒寫鏡像.pdf
imx6_Qt_wifi_mt6620(臨時).zip
GPS-datasheet_v1.0.01.pdf
iTOP-iMX6-驅動-USB轉串口PL2303_V1.0.pdf
6818-qt-ec20網卡 - 僅供參考.zip
iTOP-IMX6-Android4.4系統源碼-將APK編譯到鏡像.pdf
iTOP-IMX6-Android4.4系統源碼-設備許可權的修改.pdf
iTOP-IMX6-Android4.4系統源碼-去掉默認安裝的APK.pdf
ITOP-IMX6-Android4.4系統-ADB傳輸文件.pdf
iTOP-IMX6-Android4.4系統-開機橫豎屏切換.pdf
iTOP-4412-Linux系統-自動掛載U盤TF卡等(熱拔插)-臨時.pdf
iTOP-iMX6-Linux系統-屏蔽虛擬控制台.zip
rc522test_20150320臨時.tar.gz
飛思卡爾原廠資料06-i.MX_Android_Camera_Issues_on_the_SDP_Board.pdf
飛思卡爾原廠資料07-i.MX_Android_Extended_Codec_Release_Notes.pdf
飛思卡爾原廠資料09-i.MX_Android_Wi-Fi_Display_Sink_API_Introction.pdf
飛思卡爾原廠資料09-i.MX_Android_Wi-Fi_Display_Sink_API_Introction.pdf
飛思卡爾原廠資料02-Android_Quick_Start_Guide.pdf
飛思卡爾原廠資料04-Android_User's_Guide.pdf
飛思卡爾原廠資料05-i.MX_6_Series_G2D_API_User's_Guide.pdf
飛思卡爾原廠資料03-Android_Release_Notes.pdf
飛思卡爾原廠資料08-i.MX_Android_Extended_Wi-Fi_Display_Sink_Release_Notes.pdf
iTOP-iMX6-QtE-CAN常式和使用文檔.zip
iTOP-iMX6-獲取CPU唯一ID.zip
iTOP-iMX6-QtE4.7-RS485_V2.0.rar
iTOP-iMX6-QTE系統-調用shell命令使用文檔.zip
iTOP-iMX6-linux-C調用shell命令使用文檔.zip
iTOP4412-QtE5.7-移植使用文檔_V2.0.pdf
iTOP-iMX6-QtE-watchdog看門狗常式.zip
iTOP-IMX6-QtE4.7-Uart_V1.0.rar
iTOP-iMX6-串口Android應用測試.zip
iTOP-iMX6-Linux系統-屏蔽虛擬控制台.zip
iTOP-iMX6-QtE4.7-SDIO_WIFI_MT6620的使用.zip
iTOP-iMX6-QtE4.7-SDIO_WIFI_MT6620的使用.zip
iTOP-iMX6-Linux系統-web伺服器控制led_V1.0.pdf
iTOP-iMX6-Linux系統-搭建web伺服器_V1.0.pdf
iTOP-iMX6-Linux系統-TFTP使用文檔_V1.0.pdf
QT4412程序調用其它程序20161002-臨時.rar
iTOP-iMX6-Android-RS485使用文檔和源碼_V1.0.zip
iTOP-iMX6-MiniLinux-CAN測試使用文檔.zip
iTOP-iMX6-QtE-CAN測試使用文檔_V2.0.zip
iTOP-IMX6-QtE4.7-計算器_V1.0.rar
iTOP-IMX6-QtE4.7-Buzzer_V1.0.rar
iTOP-IMX6-QtE4.7-看門狗_V1.0.rar
iTOP-IMX6-QtE4.7-日歷_V1.0.rar
iTOP-IMX6-QtE4.7-Led_V1.0.rar
iTOP-IMX6-QtE4.7-Uart_V1.0.rar
iTOP-IMX6-QtE4.7-HelloWorld_V1.0.rar
iTOP-IMX6-QtE4.7-定時器_V1.0.rar
iTOP-IMX6-QtE4.7-USB鍵盤支持_V1.0.rar
iTOP-IMX6-QtE4.7-字體_V1.0.rar
iTOP-IMX6-QtE4.7-文本_V1.0.rar
iTOP-IMX6-QtE4.7-游戲_V1.0.rar
iTOP-IMX6-QtE4.7-相冊_V1.0.rar
iTOP-IMX6-QtE4.7-時鍾_V1.0.rar
iTOP-IMX6-QtE4.7-字體_V1.0.rar
iTOP-IMX6-QtE4.7-視頻音頻_V1.0.rar
iTOP-網路-同一網段_V1.0.pdf
iTOP-網路-最小區域網_V1.0.pdf
iTOP-iMX6-QtE-RFID測試使用文檔.zip
iTOP-iMX6-QtE系統下LVDS和HDMI雙屏異顯和同顯.pdf
iTOP-iMX6-GPIO讀寫配置文檔_V1.0.zip
iTOP-iMX6-中斷測試常式_V1.0.zip
iTOP-iMX6-Android4.4系統-屏蔽虛擬控制台.pdf
關於SIM卡座接觸不良的解決辦法.pdf
iTOP-iMX6-QtE4.7-繼電器relay模塊使用文檔_V1.0.zip
iTOP-iMX6-Android-繼電器relay模塊使用文檔_V1.0.zip
iTOP-iMX6-Android系統-開機logo修改.pdf
iTOP-iMX6-v_2.2底板擴展串口_V1.0.pdf
iTOP-iMX6-v_2.1底板擴展串口_V1.0.pdf
iTOP-4412-Android4.4-RFID測試常式-全能版v4.0底板_v1.1_臨時.zip
iTOP-iMX6Q-內核-LOGO修改使用文檔_V1.0.zip
iTOP-iMX6-Android4.4-RFID讀卡器測試常式.zip
iTOP-4412-Linux系統-ssh功能移植到開發板.zip
迅為核心板裝配指導 .pdf
關於SIM卡座接觸不良的解決辦法.pdf
iTOP-開發板-實現虛擬機和主機之間共享文件夾.pdf
iTOP-開發板-清除虛擬機安裝殘留.zip
iTOP-iMX6-驅動-PWM控制蜂鳴器.zip
iTOP-開發版-無線網路和乙太網測速iPerf工具.zip
iTOP-開發版-ubuntu系統修改系統鎖屏使用文檔.pdf
iTOP-iMX6-QtE4.7-TCPsocket通信_V1.0.rar
iTOP-開發板-Android-Eclipse的SDK在線升級方法.pdf
iTOP-開發板-Android-Eclipse打開源碼報錯解決辦法.pdf
iTOP-iMX6-uboot-修改默認環境變數.pdf
iTOP-開發板-硬體-7寸屏幕亮度調整.pdf
iTOP-iMX6- Qt4.7-4G_EC20的移植.zip
iTOP-iMX6- Qt4.7-WiFi_mt6620的移植.zip
iTOP-iMX6- Ubuntu-WiFi_mt6620的移植.zip
ITOP-4412-QtE系統-opencv移植.pdf
iTOP-iMX6-Android4.4-GPS屏蔽.txt
iTOP-iMX6-VGA模塊使用文檔_V1.0.pdf
iTOP-iMX6-Android-LVDS和HDMI雙屏異顯使用文檔_V1.0.pdf
iTOP-開發板-Android-系統修改文件夾許可權使用文檔_V1.0.pdf
iTOP-開發版-Android-系統卸載默認apk使用文檔_V1.0.pdf
linux下vim使用詳解.pdf
iTOP-iMX6-uboot修改開機log使用手冊_v1.0.zip
iTOP-iMX6-平台文件注冊設備_V1.0.pdf
iTOP-開發板-QtE系統簡介_V1.0.pdf
iTOP-開發板-驅動-mmc升級驅動修改_V1.0.zip
iTOP-iMX6Q&D-開發板-屏幕背光亮度調整_V1.0.pdf
iTOP-開發板-QtE-調用shell命令使用文檔.zip
iTOP-開發板-MiniLinux-C程序調用shell命令.zip
iTOP-iMX6-驅動-實時時鍾RTC以及Linux-c測試常式_V1.0.zip
iTOP-iMX6-NFS共享目錄_V1.1.pdf
iTOP-iMX6-Android4.4-設置MAC地址_V1.0.pdf
iTOP-iMX6-MiniLinux-GPS使用文檔_V1.0.zip
iTOP-開發板-Qt系統-修改和固定MAC地址IP地址等網路參數_V1.0.pdf
iTOP-開發板-驅動-RS85模塊ioctl操作時間間隔修改_V1.0.pdf
iTOP-實戰-GPS模塊的數據格式_V1.0.pdf
iTOP-iMX6-Android-串口測試文檔(升級版)_V2.0.zip
iTOP-開發板-modbus移植和使用文檔_V1.0.zip
iTOP-iMX6-MiniLinux-RS485測試使用文檔_V1.1.zip
iTOP-開發板-串口的基礎知識和快速測試方法_V1.0.pdf
iTOP-開發板-驅動-usb轉串口ch34x移植使用文檔_V1.0.zip
iTOP-iMX6-Ubuntu-CAN測試使用文檔_V1.0.zip
iTOP-iMX6Q&D-開發板-Ubuntu系統10分鍾不關屏幕(關閉standby模式)_V1.1.zip
iTOP-開發板-cadence allegro的安裝_V1.0.pdf
iTOP-iMX6-Android-串口屏蔽gps文檔及測試常式_V1.0.zip
iTOP-iMX6-核心板引出管腳說明_V1.0.pdf
iTOP-iMX6-Android-can測試常式介紹_V1.0.pdf
iTOP-iMX6-uboot-網路設置和測試_V1.0.pdf
iTOP-iMX6-設備樹QtE-usbwifi-RTL8723BU使用文檔_V1.0.zip
iTOP-iMX6-Ubuntu16-usbwifi-RTL8723BU使用文檔_V1.0.zip
iTOP-開發板-QtE5.7系統-10.1寸屏觸摸_V1.0.pdf
iTOP-iMX6-設備樹內核-在內核源碼中以moles的方式編譯驅動_V1.0.pdf
iTOP-iMX6-設備樹內核-預設文件文件的配置_V1.0.pdf
iTOP-iMX6-設備樹內核-menuconfig的使用 _V1.0.pdf
iTOP-iMX6-設備樹驅動-以mole的方式編譯驅動_V1.0.zip
iTOP-iMX6-設備樹內核-設備樹相關文件簡要分析_V1.0.pdf
iTOP-iMX6-設備樹內核-IO配置分析文檔_V1.0.pdf
iTOP-iMX6-設備樹內核-sys方式控制GPIO_V1.0.pdf
iTOP-iMX6-設備樹內核-注冊設備常式_V1.0.pdf
iTOP-iMX6-設備樹內核-注冊驅動常式_V1.0.zip
iTOP-iMX6-設備樹內核-IO擴展配置和測試02_V1.0.zip
iTOP-iMX6-設備樹內核-IO擴展配置和測試01_V1.0.zip
iTOP-iMX6-設備樹內核-獲取CPU唯一ID_V1.0.zip
iTOP-iMX-設備樹內核-屏幕背光亮度調整_V1.0.pdf
iTOP-iMX6-設備樹-獨立中斷常式_V1.0.zip
iTOP-iMX6-設備樹內核-實時時鍾RTC以及Linux-c測試常式_V1.0.zip
iTOP-IMX6-設備樹內核-watchdog看門狗常式_V1.0.zip
iTOP-iMX6-設備樹內核-配置和實現pwm蜂鳴器 _V1.0.pdf
iTOP-iMX6UL-QtE5.7移植文檔_V1.0.pdf
iTOP-IMX6UL開發板-ctrl+c無效修改辦法.pdf
iTOP-IMX6UL開發板-ctrl+c無效修改辦法.pdf
imx6q設備樹-RFID驅動.zip
iTOP-iMX6Q&PLUS-Android6.0下uboot添加網卡驅動.pdf
iTOP-4412-QtE4.7-UVC攝像頭使用常式_V1.0.zip
D. 我有兩塊不同型號的明遠智睿開發板,IMX6 EK200和EK314,要怎麼讓兩塊開發板通過串口通信
直接參考uart應用源碼編譯出來測試就行,設置一下波特率,數據位,停止位,校驗位都一樣,就能互相通訊有什麼問題歡迎詢問,祝您工作順利、身體健康,
E. 如何編譯高通kernal設備樹
DTS (device tree source)
.dts文件是一種ASCII 文本格式的Device
Tree描述,此文本格式非常人性化,適合人類的閱讀習慣。基本上,在ARM
Linux在,一個。dts文件對應一個ARM的machine,一般放置在內核的arch/arm/boot/dts/目錄。由於一個SoC可能對應多個machine(一個SoC可以對應多個產品和電路板),勢必這些。dts文件需包含許多共同的部分,Linux內核為了簡化,把SoC公用的部分或者多個machine共同的部分一般提煉為。dtsi,類似於C語言的頭文件。其他的machine對應的。dts就include這個。dtsi。譬如,對於VEXPRESS而言,vexpress-v2m.dtsi就被vexpress-v2p-ca9.dts所引用,
vexpress-v2p-ca9.dts有如下一行:
/include/
「vexpress-v2m.dtsi」
當然,和C語言的頭文件類似,。dtsi也可以include其他的。dtsi,譬如幾乎所有的ARM
SoC的。dtsi都引用了skeleton.dtsi。
.dts(或者其include的。dtsi)基本元素即為前文所述的結點和屬性:
[plain] view
plainprint?
/ {
node1 {
a-string-property = 「A string」;
a-string-list-property = 「first string」, 「second string」;
a-byte-data-property = [0x01 0x23 0x34 0x56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = 「Hello, world」;
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
/ {
node1 {
a-string-property = 「A string」;
a-string-list-property = 「first string」, 「second string」;
a-byte-data-property = [0x01 0x23 0x34 0x56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = 「Hello, world」;
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
上述。dts文件並沒有什麼真實的用途,但它基本表徵了一個Device
Tree源文件的結構:
1個root結點「/」;
root結點下面含一系列子結點,本例中為「node1」 和
「node2」;
結點「node1」下又含有一系列子結點,本例中為「child-node1」 和
「child-node2」;
各結點都有一系列屬性。這些屬性可能為空,如「
an-empty-property」;可能為字元串,如「a-string-property」;可能為字元串數組,如「a-string-list-property」;可能為Cells(由u32整數組成),如「second-child-property」,可能為二進制數,如「a-byte-data-property」。
下面以一個最簡單的machine為例來看如何寫一個。dts文件。假設此machine的配置如下:
1個雙核ARM
Cortex-A9 32位處理器;
ARM的local bus上的內存映射區域分布了2個串口(分別位於0x101F1000 和
0x101F2000)、GPIO控制器(位於0x101F3000)、SPI控制器(位於0x10170000)、中斷控制器(位於0x10140000)和一個external
bus橋;
External bus橋上又連接了SMC SMC91111
Ethernet(位於0x10100000)、I2C控制器(位於0x10160000)、64MB NOR
Flash(位於0x30000000);
External bus橋上連接的I2C控制器所對應的I2C匯流排上又連接了Maxim
DS1338實時鍾(I2C地址為0x58)。
其對應的。dts文件為:
[plain] view
plainprint?
/ {
compatible = 「acme,coyotes-revenge」;
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&intc>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = 「arm,cortex-a9」;
reg = <0>;
};
cpu@1 {
compatible = 「arm,cortex-a9」;
reg = <1>;
};
};
serial@101f0000 {
compatible = 「arm,pl011」;
reg = <0x101f0000 0x1000 >;
interrupts = < 1 0 >;
};
serial@101f2000 {
compatible = 「arm,pl011」;
reg = <0x101f2000 0x1000 >;
interrupts = < 2 0 >;
};
gpio@101f3000 {
compatible = 「arm,pl061」;
reg = <0x101f3000 0x1000
0x101f4000 0x0010>;
interrupts = < 3 0 >;
};
intc: interrupt-controller@10140000 {
compatible = 「arm,pl190」;
reg = <0x10140000 0x1000 >;
interrupt-controller;
#interrupt-cells = <2>;
};
spi@10115000 {
compatible = 「arm,pl022」;
reg = <0x10115000 0x1000 >;
interrupts = < 4 0 >;
};
external-bus {
#address-cells = <2>
#size-cells = <1>;
ranges = <0 0 0x10100000 0x10000 // Chipselect 1, Ethernet
1 0 0x10160000 0x10000 // Chipselect 2, i2c controller
2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash
ethernet@0,0 {
compatible = 「smc,smc91c111」;
reg = <0 0 0x1000>;
interrupts = < 5 2 >;
};
i2c@1,0 {
compatible = 「acme,a1234-i2c-bus」;
#address-cells = <1>;
#size-cells = <0>;
reg = <1 0 0x1000>;
interrupts = < 6 2 >;
rtc@58 {
compatible = 「maxim,ds1338」;
reg = <58>;
interrupts = < 7 3 >;
};
};
flash@2,0 {
compatible = 「samsung,k8f1315ebm」, 「cfi-flash」;
reg = <2 0 0x4000000>;
};
};
};
/ {
compatible = 「acme,coyotes-revenge」;
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&intc>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = 「arm,cortex-a9」;
reg = <0>;
};
cpu@1 {
compatible = 「arm,cortex-a9」;
reg = <1>;
};
};
serial@101f0000 {
compatible = 「arm,pl011」;
reg = <0x101f0000 0x1000 >;
interrupts = < 1 0 >;
};
serial@101f2000 {
compatible = 「arm,pl011」;
reg = <0x101f2000 0x1000 >;
interrupts = < 2 0 >;
};
gpio@101f3000 {
compatible = 「arm,pl061」;
reg = <0x101f3000 0x1000
0x101f4000 0x0010>;
interrupts = < 3 0 >;
};
intc: interrupt-controller@10140000 {
compatible = 「arm,pl190」;
reg = <0x10140000 0x1000 >;
interrupt-controller;
#interrupt-cells = <2>;
};
spi@10115000 {
compatible = 「arm,pl022」;
reg = <0x10115000 0x1000 >;
interrupts = < 4 0 >;
};
external-bus {
#address-cells = <2>
#size-cells = <1>;
ranges = <0 0 0x10100000 0x10000 // Chipselect 1, Ethernet
1 0 0x10160000 0x10000 // Chipselect 2, i2c controller
2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash
ethernet@0,0 {
compatible = 「smc,smc91c111」;
reg = <0 0 0x1000>;
interrupts = < 5 2 >;
};
i2c@1,0 {
compatible = 「acme,a1234-i2c-bus」;
#address-cells = <1>;
#size-cells = <0>;
reg = <1 0 0x1000>;
interrupts = < 6 2 >;
rtc@58 {
compatible = 「maxim,ds1338」;
reg = <58>;
interrupts = < 7 3 >;
};
};
flash@2,0 {
compatible = 「samsung,k8f1315ebm」, 「cfi-flash」;
reg = <2 0 0x4000000>;
};
};
};
上述。dts文件中,root結點「/」的compatible 屬性compatible =
「acme,coyotes-revenge」;定義了系統的名稱,它的組織形式為:<manufacturer>,<model>。Linux內核透過root結點「/」的compatible
屬性即可判斷它啟動的是什麼machine。
在。dts文件的每個設備,都有一個compatible
屬性,compatible屬性用戶驅動和設備的綁定。compatible
屬性是一個字元串的列表,列表中的第一個字元串表徵了結點代表的確切設備,形式為「<manufacturer>,<model>」,其後的字元串表徵可兼容的其他設備。可以說前面的是特指,後面的則涵蓋更廣的范圍。如在arch/arm/boot/dts/vexpress-v2m.dtsi中的Flash結點:
[plain] view
plainprint?
flash@0,00000000 {
compatible = 「arm,vexpress-flash」, 「cfi-flash」;
reg = <0 0x00000000 0x04000000>,
<1 0x00000000 0x04000000>;
bank-width = <4>;
};
flash@0,00000000 {
compatible = 「arm,vexpress-flash」, 「cfi-flash」;
reg = <0 0x00000000 0x04000000>,
<1 0x00000000 0x04000000>;
bank-width = <4>;
};
compatible屬性的第2個字元串「cfi-flash」明顯比第1個字元串「arm,vexpress-flash」涵蓋的范圍更廣。
再比如,Freescale
MPC8349 SoC含一個串口設備,它實現了國家半導體(National Semiconctor)的ns16550
寄存器介面。則MPC8349串口設備的compatible屬性為compatible = 「fsl,mpc8349-uart」,
「ns16550」。其中,fsl,mpc8349-uart指代了確切的設備, ns16550代表該設備與National Semiconctor
的16550
UART保持了寄存器兼容。
接下來root結點「/」的cpus子結點下面又包含2個cpu子結點,描述了此machine上的2個CPU,並且二者的compatible
屬性為「arm,cortex-a9」。
注意cpus和cpus的2個cpu子結點的命名,它們遵循的組織形式為:<name>[@<unit-address>],<>中的內容是必選項,[]中的則為可選項。name是一個ASCII字元串,用於描述結點對應的設備類型,如3com
Ethernet適配器對應的結點name宜為ethernet,而不是3com509。如果一個結點描述的設備有地址,則應該給出@unit-address。多個相同類型設備結點的name可以一樣,只要unit-address不同即可,如本例中含有cpu@0、cpu@1以及serial@101f0000與serial@101f2000這樣的同名結點。設備的unit-address地址也經常在其對應結點的reg屬性中給出。ePAPR標准給出了結點命名的規范。
F. u-boot使用make編譯出現找不到dtc命令,如何解決啊
我在ubuntu14.04上編譯uboot時也遇到了這個問題,dtc是device-tree-compiler的縮寫,即設備樹編譯器,說明系統中沒有安裝這個編譯器,我用的是apt-get install device-tree-compiler安裝後就可以成功編譯了哈。
G. 在鴻蒙(OHOS3.0)編譯框架中添加樹莓派4B
之前在樹莓派4b上點亮了OHOS3.0,不過內核是用tftp拉取的,根文件系統掛在了NFS上,拔了網線就無法啟動。當然這么操作只是為了方便調試,而最終需要的是一個可以燒錄到TF卡上的img鏡像文件。這就需要將所有調試好的內容添加到OHOS3.0的編譯框架,本以為是很簡單的事情,好傢伙,整了這么久,感覺添加編譯框架比移植本身更復雜。於是我整理了添加樹莓派單板到編譯框架的內容,希望對各位有所幫助,為大家避坑。
主要參考 hisilicon build組件倉,添加一個procts編譯組件,這個組件是在產品配置文件中指定的。比如
proctdefinecommonproctsRPI4B.json
其他部分參考Hi3516,但是其中2條,指定單板組件路徑,並添加組件。如果刪除這兩條,將不能編譯內核,只生成OHOS的文件系統。
接下來在device目錄下,新建一個raspberrypi編譯組件文件夾,並添加 ohos.build 文件。和前面產品配置文件中的設置對應起來了。
deviceraspberrypibuildohos.build
新建 deviceraspberrypibuildBUILD.gn 當然每個廠家不可能只有1個板子,如果有其他單板就在這里指定,比如樹莓派2B、3B等
既然前面指定了rpi4b的編譯配置組件,那麼就在 deviceraspberrypi 新建一個 rpi4b 的目錄,可以參考 hi3516dv300 build組件
deviceraspberrypirpi4bBUILD.gn
至此一個rpi4b build組件就添加到OHOS3.0的編譯框架了,之後相關內容添加到這個文件夾下就可以了。
接下來分析下目前移植了樹莓派4B的哪些內容,如何將這些內容編譯進OHOS3.0。
關於補丁可以參考 Patch組件,可以得知內核編譯由kernel.mk來執行
kernellinuxbuildkernel.mk
所以補丁文件需要放到正確的路徑下,以正確的名字命名就可以patch到內核。
hdf.patch補丁文件,現在還沒有移植HDF相關內容,所以可以先使用Hi3516的
rpi4b.patch補丁文件,使用樹莓派的官方鏡像,https://github.com/raspberrypi/linux
kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig
內核配置文件目前已知的需要開啟下面內容,但是肯定不止這些,以後會繼續更新
Pi4的GPU是VideoCore VI支持OpenGL ES 3.2,而Pi3的GPU是VideoCore IV支持OpenGL ES 2.0。VideoCore IV 驅動程序是 VC4,VideoCore VI 驅動程序的 V3D。內核已經提供驅動,參考rpi4b_standard_defconfig將驅動直接編入到內核。
同時需要在config.txt中開啟設置
OHOS中修改weston的配置文件,指定顯示驅動
systemetcweston.ini
具體思路就是先查找設備號,根據設備號找到驅動程序。
前面內核配置的時候rpi4b_standard_defconfig中已經將觸摸驅動編入內核,所以後面不需要在init載入模塊了,修改下eudev的配置文件即可。
third_partyeudevrules.d ouchscreen.rules
正常情況下內核是由uboot進行引導的,而且OHOS默認生成uImage。但是樹莓派自帶BootLoader,雖然可以先用樹莓派自帶的BootLoader啟動uboot,再用uboot載入uImage,但是這樣會比較麻煩,而且會增加啟動時間。不過目前 zImage是寫死在kernel.mk中的,沒辦法改下編譯腳本把。
kernellinuxbuildkernel.mk 將 uImage 改為 zImage moles dtbs
kernellinuxbuildbuild_kernel.sh
kernellinuxbuildBUILD.gn
kernellinuxbuildkernel_mole_build.sh
這里內核編譯會依賴proct_path="vendor/$proct_company/$proct_name"下的hdf.hcs文件,得先新建一個應付下,不然會報下面這個錯誤。
ninja: error: '../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs', needed by 'gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb', missing and no known rule to make it
新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs
對於鏡像燒錄,Hi3516會將uImage、system.img、vendor.img等鏡像燒寫到emmc,但是樹莓派使用TF卡啟動,所以需要對TF卡進行分區,然後復制對應的內容到各個分區。首先製作樹莓派boot目錄,這個用來目錄存放樹莓派設備樹、config.txt、cmdline.txt、內核鏡像等信息。寫一個簡單的mkboot.py腳本來實現這個功能,位置在碼倉.py將會生成boot.img。
為了方便燒錄,需要將boot.img、system.img、updater.img、vendor.img、userdata.img合並成一個rpi4b.img。還是寫一個簡單的腳本來處理這個步驟.py。
不過有個問題,主分區只支持4個,所以updater.img暫時先不合並了,這個問題等以後再來處理。
最後將會得到一個rpi4b.img的鏡像文件,將這個文件燒錄到SD卡就可以了。
Linux:可以使用dd命令
windows:使用Win32 Disk Imager工具燒錄即可。
到這里總算是跑通了一個完整的添加新單板的流程,只不過目前只適配了顯示和觸摸。接下來打算嘗試HDF或者distributed部分。
H. 如何在linux-3.x內核編譯設備樹
可以讓設備樹文件和內核一起編譯,單獨編譯的化,可以參考下面的文檔:
http://blog.csdn.net/woshigaoyuan/article/details/13996277