IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> uboot的初体验(相关资源+如何编译+如何烧录+如何运行) -> 正文阅读

[系统运维]uboot的初体验(相关资源+如何编译+如何烧录+如何运行)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

相关资源

九鼎官方的uboot:uboot_jiuding.tar

三星官方的uboot:uboot_smdkv210.tar

uboot官方的uboot:u-boot-2013.10.tar.bz2

相比九鼎和三星的uboot,uboot官方这个版本的uboot引入了linux kernel的配置体系。

另外九鼎或者三星的uboot的目录下,有相关的将uboot烧写到sd卡的脚本目录sd_fusing。

如何编译

以九鼎官方的uboot为例,说明如何对uboot进行编译。

(1)将源码解压在适当的目录下。

(2)配置,即在uboot的根目录下执行“make x210_sd_config”。

(3)编译,即在uboot的根目录下执行“make”。

root@ubuntu:/home/xjh/iot/embedded_basic/uboot# ls
uboot_jiuding.tar
root@ubuntu:/home/xjh/iot/embedded_basic/uboot# tar -xvf uboot_jiuding.tar
//省略解压输出的内容
root@ubuntu:/home/xjh/iot/embedded_basic/uboot# ls
uboot_jiuding  uboot_jiuding.tar
root@ubuntu:/home/xjh/iot/embedded_basic/uboot# cd uboot_jiuding
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding# ls
api                            cpu          libfdt       onenand_bl1
api_examples                   CREDITS      lib_generic  onenand_ipl
arm_config.mk                  disk         MAINTAINERS  post
board                          doc          MAKEALL      README
CHANGELOG                      drivers      Makefile     rules.mk
CHANGELOG-before-U-Boot-1.1.5  examples     mk           sd_fusing
Changelog_Samsung              fs           mkconfig     tools
common                         image_split  mkmovi
config.mk                      include      nand_spl
COPYING                        lib_arm      net
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding# make x210_sd_config
Configuring for x210_sd board...
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding# make
//省略编译过程
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding# ls
api                            COPYING      include      mkmovi       System.map
api_examples                   cpu          lib_arm      nand_spl     tools
arm_config.mk                  CREDITS      libfdt       net          u-boot
board                          disk         lib_generic  onenand_bl1  u-boot.bin//这里
CHANGELOG                      doc          MAINTAINERS  onenand_ipl  u-boot.dis
CHANGELOG-before-U-Boot-1.1.5  drivers      MAKEALL      post         u-boot.map
Changelog_Samsung              examples     Makefile     README       u-boot.srec
common                         fs           mk           rules.mk
config.mk                      image_split  mkconfig     sd_fusing
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding# 

这里新生成的u-boot.bin文件,就是编译得到镜像文件,可用于烧写。

如何烧录

假定前面的编译步骤顺利完成,在uboot根目录下得到了u-boot.bin这个镜像文件。

由于S5PV210的特殊启动方式,BL1不能超过16KB,所以需要利用sd_fusing目录里的脚本对这个u-boot.bin文件进行分割,以形成两个镜像文件,然后分别烧录到SD卡的适宜位置。

步骤1:sd_fusing目录里的脚本sd_fusing.sh文件,有几句代码需要修改。

//86行
./mkbl1 ../uboot_inand.bin SD-bl1-8k.bin 8192

//93行
dd iflag=dsync oflag=dsync if=../uboot_inand.bin of=$1 seek=$uboot_position

// 我们需要把这里的 uboot_inand.bin 改为 u-boot.bin
// 或者把编译得到 u-boot.bin 重新命名为 uboot_inand.bin

步骤2:将sd卡接入虚拟机的ubuntu系统中,明确sd卡对应的设备文件。

没有插SD卡之前,linux系统的/dev/sd*内容如下:

root@ubuntu:/dev# ls sd*
sda  sda1  sda2  sda5
root@ubuntu:/dev# 

将SD卡插入电脑主机后,在虚拟机的菜单中下拉“虚拟机”,选择“可移动设备”,选择SD卡对应的设备,此时linux系统的/dev/sd*内容如下。

root@ubuntu:/dev# ls sd*
sda  sda1  sda2  sda5  sdb  sdb1
root@ubuntu:/dev# df sdb -h
文件系统        容量  已用  可用 已用% 挂载点
udev            490M  4.0K  490M    1% /dev
root@ubuntu:/dev# df sdb1 -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       7.6G   16K  7.6G    1% /media/xjh/2FD6-2155
root@ubuntu:/dev# ls -l sdb1
brw-rw---- 1 root disk 8, 17 Aug 30 17:23 sdb1
root@ubuntu:/dev# ls -l sdb
brw-rw---- 1 root disk 8, 16 Aug 30 17:23 sdb

由此可知,SD卡对应的设备文件是/dev/sdb(为何不是/dev/sdb1?)。?

步骤3:执行命令“ ./sd_fusing.sh /dev/sdb ”。

root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding/sd_fusing# ./sd_fusing.sh /dev/sdb
/dev/sdb reader is identified.
make sd card partition
./sd_fdisk /dev/sdb
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.00444522 秒,115 kB/秒
mkfs.vfat -F 32 /dev/sdb1
mkfs.fat 3.0.26 (2014-03-07)
BL1 fusing
记录了16+0 的读入
记录了16+0 的写出
8192字节(8.2 kB)已复制,0.0655536 秒,125 kB/秒
u-boot fusing
记录了768+0 的读入
记录了768+0 的写出
393216字节(393 kB)已复制,2.5684 秒,153 kB/秒
U-boot image is fused successfully.
Eject SD card and insert it again.
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding/sd_fusing# 

如何运行

之前的裸机实验,或以usb方式启动(拨码开关靠近电源按钮),或以sd卡方式启动(拨码开关远离电源按钮)。注意,以sd卡方式启动时,开发板inand中的uboot已经被破坏了。另外,裸机实验用的是靠近网口的那个串口,uboot启动输出用的是远离网口的那个串口,我们需要更改回来。

步骤1:确认inand已经破坏掉,确认串口已经连接到远离网口的那个串口。

步骤2:正确连接SecureCRT。

步骤3:将烧录好镜像文件的sd卡插进靠近电源按钮的卡槽,将启动拨码开关拨向远离电源按钮的一端,然后启动开发板。

SD checksum Error  //这个是inand校验失败输出的
OK                 //这个是sd中的uboot输出的

U-Boot 1.3.4 (Sep 23 2022 - 23:10:30) for x210


CPU:  S5PV210@1000MHz(OK)
        APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz
        MPLL = 667MHz, EPLL = 96MHz
                       HclkDsys = 166MHz, PclkDsys = 83MHz
                       HclkPsys = 133MHz, PclkPsys = 66MHz
                       SCLKA2M  = 200MHz
Serial = CLKUART 
Board:   X210
DRAM:    512 MB
Flash:   8 MB
SD/MMC:  3728MB
In:      serial
Out:     serial
Err:     serial
[LEFT UP] boot mode
checking mode for fastboot ...
Hit any key to stop autoboot:  0   //倒计时结束前按下任何按键
x210 # 

倒计时结束前按下任何按键,会停留在uboot提供的shell界面。

x210 # bdinfo  //查看开发板信息
arch_number = 0x00000998
env_t       = 0x00000000
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x10000000
DRAM bank   = 0x00000001
-> start    = 0x40000000
-> size     = 0x10000000
ethaddr     = 00:40:5C:26:0A:5B
ip_addr     = 192.168.1.88
baudrate    = 115200 bps
x210 # print  //打印环境变量
mtdpart=80000 400000 3000000
bootdelay=3
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
netmask=255.255.255.0
serverip=192.168.1.141
gatewayip=192.168.1.1
ipaddr=192.168.1.88
bootcmd=tftp 30008000 zImage;bootm 30008000
bootargs=root=/dev/nfs nfsroot=192.168.1.141:/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh ip=192.168.1.88:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

Environment size: 409/16380 bytes
x210 # 

注意这个uboot的环境变量之前我修改过,表示内核镜像和根文件系统是通过tftp和nfs形式下载的。但如果内核镜像和根文件系统在inand中存在时,也可以修改成如下:
?

set bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
set bootcmd 'movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000'
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:24:39  更:2022-09-25 23:25:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:01:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码