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