Mastering Embedded Linux Programming 学习 (二)在百问网157开发板上,编译构建u-boot
Mastering Embedded Linux Programming 学习 (二)在百问网157开发板上,编译构建u-boot
一、下载u-boot源码
git clone https://gitee.com/ZHJEE/u-boot.git
cd u-boot
git checkout v2021.01
二、参考配置文件
在u-boot的源码目录下有一个configs目录,里面保存的是每一块适配的开发板的配置文件,通过文件名就能够猜到用哪一个了,不过在board目录下有更为详细的介绍,这里我用的是百问网的157板子,以157为例
找到board/st/stm32mp1/README
需要到源码目录下的doc/board/st/stm32mp1.rst文件里看详情
找到这个文件,讲述的蛮详细的
- 添加交叉编译工具链路径到PATH环境变量,在上一篇有讲述过build一个交叉编译工具链,这里用为qemu生成的工具链试试看
PATH=~/x-tools/arm-unknown-linux-gnueabi/bin/:$PATH
- 设置交叉编译工具链CROSS_COMPILE,这里的值是arm-unknown-linux-gnueabi-
- 设置编译输出目录,这里是stm32mp15_basic
export KBUILD_OUTPUT=stm32mp15_basic
首先拷贝源文件备份
拷贝board配置文件
cp configs/stm32mp15_basic_defconfig configs/myboard_defconfig
cp arch/arm/dts/stm32mp15xx-dkx.dtsi arch/arm/dts/stm32mp15xx-myboard.dtsi
cp arch/arm/dts/stm32mp157c-dk2.dts arch/arm/dts/stm32mp157c-myboard.dts
cp arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi arch/arm/dts/stm32mp157c-myboard-u-boot.dtsi
编辑arch/arm/dts/Makefile
添加如下信息
这样,在编译的时候才会编译出我们的设备树
修改arch/arm/dts/stm32mp157c-myboard.dts如下
开始编译
编译成功之后会在源码目录下生成一个stm32mp15_basic目录,里面保存了我们编译生成的镜像文件,如下图所示
这里的u-boot-spl.stm32是我们的157在iROM加载到SDRAM上的文件,SPL的意思是First Stage Bootloader
u-boot-spl.stm32在SDRAM上运行之后,初始化好DDRAM,然后把u-boot.img也就是完成的u-boot加载到DDRAM中,然后跳转到DDRAM中运行
6. 格式化SD卡
一)
把SD卡通过读卡器接到ubuntu上,然后运行lsblk命令来查看我们的SD卡被挂载到哪里
我这里是被挂载到了sdb这里,然后执行ls /dev 命令输出/dev目录下的文件,可以看到有sdb和sdb1这两个节点
二)
执行下面的命令格式化SD卡
首先需要使用fdisk命令删除sdb的分区,进入这个工具有很多的提示,这里不再赘述
sudo fdisk /dev/sdb
sudo sgdisk --resize-table=128 -a 1 \-n 1:34:545 -c 1:fsbl1 \-n 2:546:1057 -c 2:fsbl2 \-n 3:1058:5153 -c 3:ssbl \-n 4:5154:136225 -c 4:bootfs \-n 5:136226: -c 5:rootfs \-p /dev/sdb -g
分区结果如下图所示
最后提示需要重启,这里把内存卡umount并且从虚拟机弹出,然后重新连接就好了,在/dev目录下面就可以看到新的分区了
7. 烧录镜像到SD卡
执行下面的命令进行烧录
烧录镜像
sudo dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
sudo dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync
sudo dd if=u-boot.img of=/dev/sdb3 conv=fdatasync
这里的of=具体的设备分区
- 启动板子
把SD卡弹出,板子调整到SD卡启动,并在电脑打开串口
发现串口没有任何的输出…这里有可能是设备树的串口没配置对
参考
添加新板子
串口无输出
查看所示用的设备树文件arch/arm/dts/stm32mp157c-dk2.dts
发现串口0是在uart4这个上面,根据设备树文件引用的dtsi文件,在stm32mp15-pinctrl.dtsi文件中找到了uart4的引脚配置,再查找百问网157底板原理图的引脚配置,发现uart4是用PA12和PA11引脚引出的,我们需要修改对应的引脚
修改arch/arm/dts/stm32mp15-pinctrl.dtsi的uart4串口配置为PA12和PA11如下图所示
这里注意备份下源文件
修改arch/arm/dts/stm32mp157c-myboard-u-boot.dtsi下的clk_hse节点,整个注释或者改成如下形式
编译命令
make myboard_defconfig
make DEVICE_TREE=stm32mp157c-myboard all -j64
重新编译烧录可以看到串口有输出了
但是还未能正常启动我们的u-boot程序,还需要继续深入
无法正常启动u-boot
修改arch/arm/dts/stm32mp15xx-myboard.dtsi
把i2c4节点整个删除掉
把cpu0和cpu1节点整个删除掉
修改arch/arm/dts/stm32mp157c-myboard-u-boot.dtsi
把pmic整个删除掉
修改arch/arm/dts/stm32mp15xx-myboard.dtsi
把usbotg_hs下的port删除掉
在根节点下添加电源配置
v3v3: regulator-3p3v {compatible = "regulator-fixed";regulator-name = "v3v3";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;regulator-boot-on;
};v1v8_audio: regulator-v1v8-audio {compatible = "regulator-fixed";regulator-name = "v1v8_audio";regulator-min-microvolt = <1800000>;regulator-max-microvolt = <1800000>;regulator-always-on;regulator-boot-on;
};v3v3_hdmi: regulator-v3v3-hdmi {compatible = "regulator-fixed";regulator-name = "v3v3_hdmi";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;regulator-boot-on;
};v1v2_hdmi: regulator-v1v2-hdmi {compatible = "regulator-fixed";regulator-name = "v1v2_hdmi";regulator-min-microvolt = <1200000>;regulator-max-microvolt = <1200000>;regulator-always-on;regulator-boot-on;
};vdd: regulator-vdd {compatible = "regulator-fixed";regulator-name = "vdd";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;regulator-boot-on;
};vdd: regulator-vdd {compatible = "regulator-fixed";regulator-name = "vdd";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;regulator-boot-on;
};vdd_usb: regulator-vdd-usb {compatible = "regulator-fixed";regulator-name = "vdd_usb";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;regulator-boot-on;
};
进入图形化配置界面
make menuconfig
在Device Drivers --> Power --> Enable support for STMicroelectronics STPMIC1 PMIC 禁用掉
重新编译烧录
运行结果如下,又报新的错误了
DDR大小不匹配问题
看意思是DDR的大小不匹配
arch/arm/dts/stm32mp157c-myboard-u-boot.dtsi里面包含了stm32mp15-ddr3-1x4Gb-1066-binG.dtsi这个文件和开发板的不匹配,在参考了100ask的uboot补丁之后,发现要修改成arch/arm/dts/stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi(这里名字发生了改变,之前是stm32mp15-ddr3-2x2Gb-1066-binG.dtsi的)
重新编译烧录…
又报下面的错误了
无法从SD卡启动
这里报错的原因是因为SDMMC和SD卡的配置引脚不对导致的,查看100ask的原理图发现与SD卡的CD引脚连接的是PA3
需要修改arch/arm/dts/stm32mp15xx-myboard.dtsi文件下的sdmmc1节点的cd-gpios属性,把引脚修改成我们的PA3就好了
重新编译烧录,启动时按住空格就可以进入到u-boot的界面了
adc报错
这里还报了adc的错误
在make menuconfig界面把相应的adc选项去掉就好了
Command line interface —>
Device access commands —>
adc - Access Analog to Digital Converters info and data 取消掉
Device Drivers —>
Enable ADC drivers using Driver Model 取消掉
重新编译烧录发现没有adc报错了
设置sdmmc2
原来的arch/arm/dts/stm32mp157c-myboard-u-boot.dtsi只有sdmmc1,我们我们需要做些调整
在aliases下添加mmc1 = &sdmmc2
在sdmmc1节点后添加sdmmc2的内容,和sdmmc1的内容一样
修改arch/arm/dts/stm32mp15xx-myboard.dtsi,添加sdmmc2的引脚信息,这里是参考的百问网的补丁文件
&sdmmc2 {pinctrl-names = "default", "opendrain", "sleep";pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;non-removable;no-sd;no-sdio;st,dirpol;st,negedge; bus-width = <8>;vmmc-supply = <&v3v3>;/* 补丁文件这里电源配置有修改过,这里修改成我们当前使用的,竟然也可以工作 *///vqmmc-supply = <&vmmc>;status = "okay";
};
这里发现vmmc节点是这样的
还不太懂,暂时留个悬念吧
重新编译烧录
设置网口的MAC地址
setenv ethaddr 1A:1F:DB:0E:69:FD
saveenv
最后把配置文件拷贝回去
cp .config configs/myboard_defconfig
这样下次就能直接使用了
Mastering Embedded Linux Programming 学习 (二)在百问网157开发板上,编译构建u-boot相关推荐
- Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题
Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题 思考.参考 搜索发现,需要配置设备树,参考这个链接 修改设备树 找到百问 ...
- Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核
Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核 一.下载内核源码 wget http://ftp.sjtu.edu ...
- Mastering Embedded Linux Programming 学习 (一)嵌入式交叉编译工具链的构建,基于crosstool-NG
Mastering Embedded Linux Programming 学习 (一) 一.ubuntu 软件包下载 sudo apt install autoconf automake bison ...
- 基于百问网IMX6ULL_PRO开发板的Uboot移植(Uboot-2017.03)
文章目录 引言 Uboot下载 Uboot目录分析 目录分析 移植所需要关注的目录 首次编译下载Uboot 编译 下载 方法1 方法2 方法3 现象 移植Uboot 添加自己单板相关文件 添加修改单板 ...
- 基于百问网IMX6ULL_PRO开发板移植LCD多点触摸驱动(GT911)
引言 笔者这里使用的Linux内核是自己移植的4.1.15版本 添加驱动代码 进入drivers/input/touchscreen目录查找是否拥有gt911驱动 cd drivers/input/t ...
- 关于百问网_STM32F103_MINI开发板的介绍
STM32F103_MINI开发板的介绍 学习内容: 建立集成开发环境 调试或者下载 打印显示 1.如何建立集成开发环境: 主要通过步骤是编辑→编译→汇编→链接→调试和下载 2.调试和下载: 主机(电 ...
- 【百问网DongshanPI-D1S开发板体验】+ RT-Smart初体验
前言 根据测评计划,本次在D1S开发板芯片上体验RT-Smart系统,在整个过程中也遇到了很多问题,熬了几个晚上,终于把坑铺平了,本篇文章记录整个过程,本篇文章是完成后才写的,中间可能有部分遗漏,遇到 ...
- qt 4.8.4 linux,Tslib和Qt 4.8.4与在开发板上的移植
这篇博客算是接着Linux 下编译.安装.配置 QT这篇的,搞完PC平台的就来弄一下嵌入式平台的,Linux的东西搞起来麻烦的地方就在于太杂.太散,像QT,各版本之间都有很多差异,因此在网络上查找资料 ...
- IMX6ULL裸机学习----LED正点原子在韦东山开发板上实现
前言 一.IMX6ULL 启动流程? 二.LED代码移植 1.硬件介绍 2.代码移植 总结 前言 最近在学习IMX6ULL这个开发板,手边有韦东山老师的imx6ull全功能板子,为了练习学习的初步效果 ...
最新文章
- 怎么把json数据转化为数组_RESTful API 返回统一JSON数据格式是怎么实现的?
- Docker 1.10版本发布
- Spark RDD解密
- android两个耳机能连两部手机吗,AirPods使用技巧:如何让耳机同时连接两台手机...
- quartus怎么仿真波形_单相半波可控整流电路电阻负载的Matlab Simulink仿真
- 『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术
- 从0开始:500行代码实现 LSM 数据库
- mysql 函数怎样创建_mysql里怎样创建函数
- winform如何实现将数据库数据加载到树上
- win10计算机管理字体糊,完美解决win10系统字体模糊
- RTI_DDS自定义插件开发 4 接收方
- 【CSRF-01】跨站请求伪造漏洞基础原理及攻防
- Matter over Wi-Fi: Raspberry Pi 4开发环境设置
- php datedif,Excel Datedif函数全面解析及BUG分析
- 微习惯养成,互联网产品成败的关键因素
- 块存储、文件存储、对象存储三者的区别
- Jpeg文件格式转换成bmp文件格式
- android多屏幕多分辨率的一些概念
- 李峋同款爱心代码 python版
- nginx 检测脚本