Yocto开发笔记之《U-boot启动内核流程》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样
========================================================
执行命令
u-boot# env default -f -a; setenv ipaddr 192.168.0.100;setenv serverip 192.168.0.107;setenv image zImage;setenv fdt_file zImage-imx6ul-14x14-evk.dtb;setenv rootfsinfo 'setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:/tftpboot/imx6ulevk.rootfs,v3,tcp';setenv bootcmd_net 'run rootfsinfo; dhcp ${image}; dhcp ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr}';setenv bootcmd 'run bootcmd_net'
出现错误
CPU: Freescale i.MX6UL rev1.0 at 396 MHz
CPU: Temperature 38 C
Reset cause: POR
Board: MX6UL 14x14 EVK
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Display: TFT43AB (480x272)
Video: 480x272x24
In: serial
Out: serial
Err: serial
switch to partitions #0, OK
mmc1 is current device
Net: FEC1
Normal Boot
Hit any key to stop autoboot: 0
BOOTP broadcast 1
DHCP client bound to address 192.168.0.105 (3 ms)
Using FEC1 device
TFTP from server 192.168.0.107; our IP address is 192.168.0.105
Filename 'zImage'.
Load address: 0x80800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
########################
885.7 KiB/s
done
Bytes transferred = 6070432 (5ca0a0 hex)
BOOTP broadcast 1
DHCP client bound to address 192.168.0.105 (3 ms)
Using FEC1 device
TFTP from server 192.168.0.107; our IP address is 192.168.0.105
Filename 'zImage-imx6ul-14x14-evk.dtb'.
Load address: 0x83000000
Loading: ###
364.3 KiB/s
done
Bytes transferred = 34342 (8626 hex)
Kernel image @ 0x80800000 [ 0x000000 - 0x5ca0a0 ]
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid
修改为(Thanks tony):
U-boot# setenv serverip 192.168.0.107; setenv bootargs console=ttymxc0, debug root=/dev/nfs ip=dhcp nfsroot=${serverip}:/nfsroot/rootfs,v3,tcp
dhcp 0x80800000 zImage; dhcp 0x83000000 zImage-imx6ul-14x14-evk.dtb; bootz 0x80800000 - 0x83000000 # 注释
# setenv serverip 192.168.0.107; // 设置服务器地址
# setenv bootargs console=ttymxc0,115200 debug root=/dev/nfs ip=dhcp nfsroot=${serverip}:/nfsroot/rootfs,v3,tcp // boot属性,串口显示log,配置nfs加载rootfs
# dhcp 0x80800000 zImage; // 设置zImage的加载地址
# dhcp 0x83000000 zImage-imx6ul-14x14-evk.dtb; // 设置dtb文件的加载地址
# bootz 0x80800000 - 0x83000000 // 开始加载地址段之间的内容到内存
以下代码可以从tftp加载zImage和zImage-imx6ul-14x14-evk.dtb,但加载rootfs时出错,错误log
cpu cpu0: dev_pm_opp_get_opp_count: device OPP not found (-)
gpio_dvfs: disabling
VSD_3V3: disabling
can-3v3: disabling
regulator-dummy: disabling
imx mcc test is registered.
snvs_rtc 20cc034.snvs-rtc-lp: setting system clock to -- :: UTC ()
IP-Config: Failed to open eth0
IP-Config: Failed to open eth1
IP-Config: No network devices available
ALSA device list:
#: wm8960-audio
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
1f00 mtdblock0 (driver?)
b300 mmcblk1 driver: mmcblk
b301 mmcblk1p1 a9d0174c-
b302 mmcblk1p2 a9d0174c-
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(,)
random: nonblocking pool is initialized
初步断定是nfs服务器加载失败, 先设置从sd卡中加载rootfs,可以正常启动:
setenv bootargs 'console=ttymxc0,115200 debug ip=dhcp root=/dev/mmcblk1p2 rootwait rw'
进入系统后网卡无法正常打开
root@imx6ulevk:/usr/games# ifconfig eth0 up
ifconfig: SIOCSIFFLAGS: No such device
查看系统信息
# dmesg | grep eth -C
===================================================================================================
常用命令备忘
# env default -f -a // 恢复默认设置
# saveenv // 保存设置到长期存储emmc,否则掉电设置失效
# help or ? // 查看帮助信息
# print // 打印当前环境信息
# setenv ethaddr xx:xx:xx:xx:xx:xx // 因为要上网,如果网卡没有mac地址,随便搞个mac地址
# setenv ethaddr 00.01.02.03.04.05
===================================================================================================
boot四大件儿
Bootloader (U-boot); // 如果没有指定boot设备,默认从SD/MMC启动;
// MFGTool可以把u-boot image烧写到任何所有设备,
// 可以通过dd命令把u-boot image烧写到sdcard
// 通过u-boot命令行可以把u-boot image 烧写到其他设备
Linux kernel image(zImage); // 所有I.MX的板子可以用同一套zImage
A device tree file (.dtb) for the board being used // 适配不同的硬件pin和软件配置文件,专门做适配的一个东东;
// 注意在选择上有个LDO bypass区别,硬件和系统工程师注意
A root file system(rootfs) for the particular system image // busybox, common libraries
========================================================
SD卡启动
先准备一张4G卡,如果您有钱用8G也没关系,只不过会有4G浪费不见了,有更多空间需求也可以自己适配。
可以通过一个命令一次烧写四大件儿,XXX.sdcard这个文件都包含了,简单方便。
也可以分批次一个一个烧写四大件儿,灵活。
Table 1. Image layout |
|||
Start address (sectors) |
Size (sectors) |
Format |
Description |
0x400 bytes (2) |
0x9FFC00 bytes (20478) |
RAW |
U-Boot and reserved area |
0xa00000 bytes (20480) |
500 Mbytes (1024000) |
FAT |
Kernel zImage and DTBs |
0x25800000 bytes (1228800) |
Remaining space |
Ext3/Ext4 |
Rootfs |
准备第一次烧写:
$ cat /proc/partitions // 找到自己sd卡的盘符,别找错了,不然可能毁掉你的操作系统
$ sudo dd if=<.sdcard image> of=/dev/sdx bs=1M conv=fsync // 替换到属于你的.sdcard image和u盘盘符
.sdcard image 这个东西很牛逼,已经对sdcard分好了区,如果你想分开烧写四大件,你就得自己分区了:
$ sudo umount /dev/sdx // 先卸掉设备
$ sudo fdisk /dev/sdx // 进入磁盘分区程序,别怕费事儿,按顺序把下边儿命令敲了吧
p [lists the current partitions]
d [to delete existing partitions. Repeat this until no unnecessary partitions
are reported by the 'p' command to start fresh.]
u [switch the unit to sectors instead of cylinders]
n [create a new partition]
p [create a primary partition - use for both partitions]
1 [the first partition]
20480 [starting at offset sector]
1024000 [size for the first partition to be used for the boot images]
p [to check the partitions]
n
p
2
1228800 [starting at offset sector, which leaves enough space for the kernel,
the bootloader and its configuration data]
<enter> [using the default value will create a partition that extends to
the last sector of the media]
p [to check the partitions]
w [this writes the partition table to the media and fdisk exits]
拷贝四大件儿
内容太多,就不一一拷贝了,参考文档《i.MX_Linux_User's_Guide.pdf》
========================================================
从NFS启动系统
setenv serverip 192.168.0.107
setenv consoleinfo 'console=ttymxc0,115200'
setenv displayinfo 'video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'
setenv loadaddr 0x80800000 setenv fdt_addr 0x83000000 setenv fdt_file 'zImage-imx6ul-14x14-evk.dtb'
setenv special 'uart_from_osc'
setenv rootfsinfo 'root=/dev/nfs ip=dhcp nfsroot=${serverip}:/nfsroot/rootfs,v3,tcp'
setenv bootargsset 'setenv bootargs ${consoleinfo} ${rootfsinfo} ${displayinfo} ${special}'
setenv bootcmd_net 'run rootfsinfo bootargsset; dhcp ${image}; dhcp ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr}'
setenv bootcmd 'run bootcmd_net'
-------------------------
setenv ipaddr 192.168..xxx
setenv serverip 192.168..xxx
setenv bootfile uImage
setenv nfsroot /home/carmili/ltib/rootfs
setenv bootargs_base 'setenv bootargs console=ttymxc0,115200'
setenv bootargs_nfs 'setenv bootargs ${bootargs} root=/dev/nfs rw ip=${ipaddr }{serverip }:192.168.2.1:255.255.255.0::eth0ff nfsroot=${serverip}{nfsroot},v3,tcp
setenv bootcmd_net 'run bootargs_base bootargs_nfs;bootm'
setenv bootcmd 'tftpboot uImage; run bootcmd_net'
-------------------------
U-Boot > setenv ipaddr 192.168.0.100
U-Boot > setenv serverip 192.168.0.107
U-Boot > setenv image zImage
U-Boot > setenv fdt_file zImage-imx6ul-14x14-evk.dtb
U-Boot > setenv rootfsinfo 'setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:/tftpboot/imx6ulevk.rootfs,v3,tcp'
U-Boot > setenv bootcmd_net 'run rootfsinfo; dhcp ${image}; dhcp ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr}'
U-Boot > setenv bootcmd 'run bootcmd_net'
从SD卡启动
U-Boot > setenv mmcpart
U-Boot > setenv loadfdt 'fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}'
U-Boot > setenv loadkernel 'fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage'
U-Boot > setenv bootcmd 'mmc dev ${mmcdev}; run loadkernel; run mmcargs; run loadfdt; bootz $ {loadaddr} - ${fdt_addr};'
Yocto开发笔记之《U-boot启动内核流程》(QQ交流群:519230208)的更多相关文章
- 运维开发笔记整理-URL配置
运维开发笔记整理-URL配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.URL路由 对于高质量的Web应用来说,使用简洁,优雅的URL的路由是一个非常值得重视的细节.Dja ...
- Yocto开发笔记之《快速入门,环境搭建 & 编译》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================== ...
- Yocto开发笔记之《根文件系统裁剪》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- Yocto开发笔记之《嵌入式linux libcurl编程》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- Yocto开发笔记之《驱动调试-GPS数据采集》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- Yocto开发笔记之《Tip-bitbake常用命令》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- [Openwrt 项目开发笔记]:MySQL配置(六)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...
- 《linux就该这么学》课堂笔记12 网卡配置、防火墙配置
1.网卡配置(四种方法,选其一即可,配置后须重启网络服务使其生效) 1)修改配置文件./etc/sysconfig/network-scripts/ifcfg-网卡名称 2)nmtui [RHEL7] ...
- Yocto开发笔记之《网卡配置》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ============================================== # ifconfig -a # ...
随机推荐
- keypress,keydown,keyup,charCode,keyCode兼容性问题
keypress对应的是字符编码,如“ABC”,“123”之类,有大小写之分(有兼容性问题) keydown,keyup对应的是键盘的键码,无大小写之分,每个键盘都有一个键码(无兼容性问题) 使用ke ...
- CSS中的行为——expression
IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript脚本关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性.就是说CSS属性后面可以是一段J ...
- android开发------Activity生命周期
这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...
- RabbitMQ 路由选择 (Routing)
让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码 ...
- 读取Properties键值对
public class CommonFunc { /** * 取properties文件中的键值对 */ public static String getProperties(String para ...
- ubuntu eclipse 不能新建javaweb项目解决方案
ubuntu下,通过sudo apt-get install eclipse 成功安装了eclipse,可它简洁的都让我不知如何新建web project.网上查了众多资料,终于找到了一系列简洁的方法 ...
- confluence的安装、备份和恢复(wiki)
还有一种比较不错的wiki工具MediaWiki 安装教程参考 http://pangge.blog.51cto.com/6013757/1560249 我是按照上面的教程搭建的 还有几篇不错的文章 ...
- react.js 表单验证-登录框
import React,{ Component } from 'react'; import style from 'cms.css'; /** * 路由路径 登录成功后页面跳转到index * ...
- hibernate在使用sql查询query自动转化成model类型数据,query.addEntity
hibernate使用自动的hql查询或者其封装的查询方法都能字段转化成对象 而如果在hibernate中使用sql时大多返回为Object[]对象 那么如何将object[]转换成model呢,答案 ...
- spring3使用task:annotation-driven开始定时
先看一个案例 package com.jCuckoo.demo; import java.text.SimpleDateFormat; import java.util.Date; import or ...