uboot移植-野火imx6ull

uboot移植及LCD和网络驱动设置

环境:

Ubuntu 20.04

野火imx6ull pro开发板

tftp服务的搭建

IMX6ULL开发板参考的是NXP官方的I.MX6ULL EVK开发板做的硬件。

Linux的移植要复杂的多,在移植Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动Linux 内核,bootloader有很多,常用的就是 U-Boot。移植好U-Boot以后再移植Linux 内核,移植完Linux内核以后Linux还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以 U-Boot、Linux kernel 和 rootfs 这三者一起构成了一个完整的Linux 系统,一个可以正常使用、功能完善的 Linux 系统。

uboot 的全称是Universal Boot Loader,uboot是一个遵循GPL协议的开源软件,uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的uboot已经支持液晶屏、网络、USB 等高级功能。

Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动Linux 内核,bootloader和Linux内核的关系就跟PC上的 BIOS 和Windows的关系一样,bootloader就相当于BIOS。

一、U-Boot命令

=> help
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
bmode   - sd1|sd2|qspi1|normal|usb|sata|ecspi1:0|ecspi1:1|ecspi1:2|ecspi1:3|esdhc1|esdhc2|esdhc3|esdhc4 [noreset]
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
bootz   - boot Linux zImage image from memory
clocks  - display clocks
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dcache  - enable or disable data cache
dhcp    - boot image via network using DHCP/TFTP protocol
dm      - Driver model low level access
echo    - echo args to console
editenv - edit environment variable
env     - environment handling commands
erase   - erase FLASH memory
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
ext4load- load binary file from a Ext4 filesystem
ext4ls  - list files in a directory (default /)
ext4size- determine a file's size
ext4write- create a file in the root directory
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fatsize - determine a file's size
fatwrite- write file into a dos filesystem
fdt     - flattened device tree utility commands
flinfo  - print FLASH memory information
fstype  - Look up a filesystem type
fuse    - Fuse sub-system
go      - start application at address 'addr'
gpio    - query and control gpio pins
help    - print command description/usage
i2c     - I2C sub-system
icache  - enable or disable instruction cache
iminfo  - print header information for application image
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
load    - load binary file from a filesystem
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls      - list files in a directory (default /)
md      - memory display
mdio    - MDIO utility commands
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mtest   - simple RAM read/write test
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
pmic    - PMIC
printenv- print environment variables
protect - enable or disable FLASH write protection
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
save    - save file to a filesystem
saveenv - save environment variables to persistent storage
setenv  - set environment variables
setexpr - set environment variable as the result of eval expression
sf      - SPI flash sub-system
showvar - print local hushshell variables
size    - determine a file's size
sleep   - delay execution for some time
source  - run script from memory
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
usb     - USB sub-system
usbboot - boot from USB device
version - print monitor, compiler and linker version

二、U-Boot移植

uboot 的移植并不是说我们完完全全的从零开始将从官网下载的uboot 移植到我们所使用的开发板上。这个难度较大,这个工作一般是半导体厂商做的,半导体厂商会将uboot 移植到他们自己的原厂开发板上,测试好以后就会将这个uboot发布出去,这就是大家常说的原厂BSP包。我们一般做产品的时候就会参考原厂的开发板做硬件,然后在原厂提供的BSP包上做修改,将uboot或者linux kernel移植到我们的硬件上。这个就是uboot 移植的一般流程:

①、在uboot中找到参考的开发平台,一般是原厂的开发板。

②、参考原厂开发板移植uboot到我们所使用的开发板上。

1、移植NXP官方的uboot到开发板IMX6ULL开发板参考的是NXP官方的I.MX6ULL EVK开发板做的硬件。因此在移植uboot的时候就可以以NXP官方的I.MX6ULL EVK开发板为蓝本。将 NXP官方的uboot移植到野火的I.MX6ULL开发板上。

1、编译一下NXP官方I.MX6ULL EVK开发板对应的uboot。

2、在 U-Boot中添加自己的开发板

1、添加开发板默认配置文件

先查看下我们要参考的配置文件是否存在,从下图可以看出是存在的。

image-20231020160440025

先在configs目录下创建默认配置文件,复制mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_myself_emmc_defconfig,命令如下:

cp configs/mx6ull_14x14_evk_emmc_defconfig configs/mx6ull_myself_emmc_defconfig

修改mx6ull_myself_emmc_defconfig文件,打开configs/mx6ull_myself_emmc_defconfig

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将第1行中的mx6ullevk修改为mx6ull_myself_emmc

将第4行中的CONFIG_TARGET_MX6ULL_14X14_EVK=y修改为CONFIG_TARGET_MX6ULL_MYSELF_EMMC=y

2、添加开发板对应的头文件

在 目 录 include/configs 下 添 加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制include/configs/mx6ullevk.h,并重命名为 mx6ull_myself_emmc.h,命令如下:

cp include/configs/mx6ullevk.h include/configs/mx6ull_myself_emmc.h

修改include/configs/mx6ull_myself_emmc.h

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

修改为

#ifndef __MX6ULL_MYSELF_EMMC_CONFIG_H
#define __MX6ULL_MYSELF_EMMC_CONFIG_H

mx6ull_alientek_emmc.h 里面有很多宏定义,这些宏定义基本用于配置uboot,也有一些I.MX6ULL 的配置项目。如果我们自己要想使能或者禁止uboot的某些功能,那就在mx6ull_alientek_emmc.h 里面做修改即可。mx6ull_alientek_emmc.h里面的内容比较多,去掉一些用不到的配置。

3、添加开发板对应的板级文件夹

uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。NXP 的 I.MX 系列芯片的所有板级文件夹都存放在board/freescale目录下,在这个目录下有个名为mx6ullevk 的文件夹,这个文件夹就是NXP官方I.MX6ULL EVK开发板的板级文件夹。复制mx6ullevk,将其重命名为mx6ull_alientek_emmc,命令如下:

cp board/freescale/mx6ullevk/ -r board/freescale/mx6ull_myself_emmc

board/freescale/mx6ull_myself_emmc/mx6ullevk.c目 录 中的mx6ullevk.c 文件重命名为mx6ull_myself_emmc.c,命令如下:

mv board/freescale/mx6ull_myself_emmc/mx6ullevk.c board/freescale/mx6ull_myself_emmc/mx6ull_myself_emmc.c
1 、修改board/freescale/mx6ull_myself_emmc目录下的Makefile

obj-y := mx6ullevk.o修改为obj-y := mx6ull_myself_emmc.o

如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 、修改board/freescale/mx6ull_myself_emmc目录下的 imximage.cfg 文件

在文件中找到下面内容

PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000

修改为

PLUGIN board/freescale/mx6ull_myself_emmc/plugin.bin 0x00907000

修改位置如下图所示:

image-20231020170152967

3 、修改mx6ull_alientek_emmc 目录下的 Kconfig 文件

打开Kconfig文件mx6ullevk替换为mx6ull_myself_emmc

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4 、修改mx6ull_alientek_emmc 目录下的MAINTAINERS文件

修改 MAINTAINERS 文件,修改后的内容如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、修改 U-Boot 图形界面配置文件

uboot 是支持图形界面配置,关于 uboot 的图形界面配置下一章会详细的讲解。修改文件arch/arm/cpu/armv7/mx6/Kconfig,在 207 行加入如下内容:

config TARGET_MX6ULL_MYSELF_EMMC
	bool "Support mx6ull_myself_emmc"
	select MX6ULL
	select DM
	select DM_THERMAL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

arch/arm/cpu/armv7/mx6/Kconfig文件后面添加内容

source "board/freescale/mx6ull_myself_emmc/Kconfig"

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到此为止,I.MX6U开发板就已经添加到uboot中了,接下来就是编译这个新添加的开发板。

5、使用新添加的板子配置编译 uboot

sudo make ARCH=arm CROSS_COMPILE=/home/cwz/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/arm-eabi- mx6ull_myself_emmc_defconfig 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入以下命令编译uboot

sudo make ARCH=arm CROSS_COMPILE=/home/cwz/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/arm-eabi- -j8

执行完上述命令,编译出许多u-boot相关的文件,在这里只关注u-boot.bin文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

烧录u-boot文件到sd卡

在电脑插入sd卡,使用ls /dev/sd*找到对应的设备。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用imxdownload程序,将u-boot.bin程序烧录到sd卡中,这里我的sd设备是sdc,根据自己的sd卡调整,一定不要搞错!!

./imxdownload u-boot.bin /dev/sdc

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试

将烧录好的sd插入开发板启动,在mobaxter显示信息如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分析打印信息

image-20231020223858266

从图可以看出,uboot 启动正常,虽然我们用的是NXP官方I.MX6ULL开发板的uboot,但是在野火的I.MX6ULL开发板上是可以正常启动的,而且DRAM识别正确,为512MB。如果用的NAND版本的核心版的话uboot启动会失败!因为NAND核心板用的 256MB的DRAM。

6、LCD 驱动修改

一般 uboot 中修改驱动基本都是在xxx.h和xxx.c这两个文件中进行的,xxx 为板子名称,比如 mx6ull_alientek_emmc.h 和 mx6ull_alientek_emmc.c 这两个文件。

一般修改 LCD 驱动重点注意以下几点:
①、LCD 所使用的 GPIO,查看uboot中LCD的IO配置是否正确。
②、LCD 背光引脚GPIO的配置。
③、LCD 配置参数是否正确。

正点原子的 I.MX6U-ALPHA 开发板 LCD 原理图和 NXP 官方 I.MX6ULL 开发板一致,也就是 LCD的IO和背光IO都一样的,所以IO部分就不用修改了。需要修改的之后LCD参数,打开文件 mx6ull_alientek_emmc.c,找到如下所示内容:修改board/freescale/mx6ull_myself_emmc/mx6ull_myself_emmc.c

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

name :LCD 名字,要和环境变量中的 panel 相等。
xres 、yres :LCD X 轴和 Y 轴像素数量。
pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒。
left_margin :HBP,水平同步后肩。
right_margin :HFP,水平同步前肩。
upper_margin:VBP,垂直同步后肩。
lower_margin:VFP,垂直同步前肩。
hsync_len :HSPW,行同步脉宽。
vsync_len:VSPW,垂直同步脉宽。
vmode :大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描。

这里的参数要根据你的屏幕对应上面的参数要一一对应,不能错。

找到下面的内容

struct display_info_t const displays[] = {{
	.bus = MX6UL_LCDIF1_BASE_ADDR,
	.addr = 0,
	.pixfmt = 24,
	.detect = NULL,
	.enable	= do_enable_parallel_lcd,
	.mode	= {
		.name			= "TFT43AB",
		.xres           = 480,
		.yres           = 272,
		.pixclock       = 108695,
		.left_margin    = 8,
		.right_margin   = 4,
		.upper_margin   = 2,
		.lower_margin   = 4,
		.hsync_len      = 41,
		.vsync_len      = 10,
		.sync           = 0,
		.vmode          = FB_VMODE_NONINTERLACED
} } };

修改成下面内容:

1/(33.3*106)*1012=30030

struct display_info_t const displays[] = {{
	.bus = MX6UL_LCDIF1_BASE_ADDR,
	.addr = 0,
	.pixfmt = 24,
	.detect = NULL,
	.enable	= do_enable_parallel_lcd,
	.mode	= {
		.name			= "TFT43AB",
		.xres           = 800,
		.yres           = 480,
		.pixclock       = 30030,
		.left_margin    = 8,
		.right_margin   = 4,
		.upper_margin   = 2,
		.lower_margin   = 4,
		.hsync_len      = 41,
		.vsync_len      = 10,
		.sync           = 0,
		.vmode          = FB_VMODE_NONINTERLACED
} } };
测试网络

野火的开发板,网卡不需要修改驱动,插上网线后,按照下面的进行测试。

使用sd卡启动,在mobaxterm上显示,如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提示没有设置地址输入以下命令设置环境变量:

设置网络相关的变量
setenv serverip '192.168.3.200'
setenv gatewayip '192.168.3.254'
setenv netmask '255.255.255.0'
setenv ipaddr '192.168.3.167'
setenv ethaddr '32:34:46:78:9A:DC'
saveenv

image-20231024120817271

重新启动开发板,打印画面如下:

image-20231024120853725

测试网络是否连通

接着在mobaxtem中ping以下虚拟机的IP地址,成功画面如下:

image-20231024115910441

uboot启动linux测试

经过上面的网络测试,我们使用uboot加载的内核镜像是在Ubuntu上的tftp服务的共享目录下,将zImage和设备树文件imx6ull-14x14-evk-emmc.dtb(编译linux源码得到的,这里先提前拿出来用)放到Ubuntu上的/home/cwz/tftp_share/目录(这是我创建的tftp共享目录)。

启动uboot,进入命令行模式。

在baxterm输入下面命令,从Ubuntu上下载内核镜像

tftp 80800000 zImage

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在baxterm上下载设备树文件

tftp 83000000 imx6ull-14x14-evk-emmc.dtb

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动linux

bootz 80800000 - 83000000

内核刚开始启动的画面

image-20231122103828640

最后停留在这里,是因为没有根文件系统

image-20231122103845663

到这里说明我们uboot启动linux是成功的。

上面设置变量是一步一步来的,可以在mobaxterm上直接设置变量。

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-evk-emmc.dtb;bootz 80800000 - 83000000'

保存变量

saveenv

查看设置的环境变量

printfenv

image-20231122104244916

从上图可以看到,设置了变量。

重新启动开发板,就会在mobaxtem上输出下面信息,

U-Boot 2016.03 (Oct 24 2023 - 15:33:54 +0800)

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 44C
Reset cause: POR
Board: MX6ULL_TEST
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Display: TFT43AB (800x480)
Video: 800x480x24
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0
Using FEC1 device
TFTP from server 192.168.3.200; our IP address is 192.168.3.210
Filename 'zImage'.
Load address: 0x80800000
Loading: #######################################################error frame: 0x9ef46940 0x00000804
##########
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #####
         314.5 KiB/s
done
Bytes transferred = 6680104 (65ee28 hex)
Using FEC1 device
TFTP from server 192.168.3.200; our IP address is 192.168.3.210
Filename 'imx6ull-14x14-evk-emmc.dtb'.
Load address: 0x83000000
Loading: ########
         201.2 KiB/s
done
Bytes transferred = 36093 (8cfd hex)
Kernel image @ 0x80800000 [ 0x000000 - 0x65ee28 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300bcfc

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.1.15 (cwz@cwz) (gcc version 4.9.3 20150413 (prerelease) (Linaro GCC 4.9-2015.05) ) #1 SMP PREEMPT Wed Oct 25 17:37:12 CST 2023
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Freescale i.MX6 ULL 14x14 EVK Board
Reserved memory: created CMA memory pool at 0x8c000000, size 320 MiB
Reserved memory: initialized node linux,cma, compatible id shared-dma-pool
Memory policy: Data cache writealloc
PERCPU: Embedded 12 pages/cpu @8bb32000 s16960 r8192 d24000 u49152
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: noinitrd console=ttymxc0,115200
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 178576K/524288K available (8396K kernel code, 446K rwdata, 2928K rodata, 440K init, 450K bss, 18032K reserved, 327680K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xa0800000 - 0xff000000   (1512 MB)
    lowmem  : 0x80000000 - 0xa0000000   ( 512 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .text : 0x80008000 - 0x80b1737c   (11325 kB)
      .init : 0x80b18000 - 0x80b86000   ( 440 kB)
      .data : 0x80b86000 - 0x80bf5be0   ( 447 kB)
       .bss : 0x80bf8000 - 0x80c68a1c   ( 451 kB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Preemptible hierarchical RCU implementation.
        Additional per-CPU info printed with stalls.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
NR_IRQS:16 nr_irqs:16 16
mxc_clocksource_init 3000000
Switching to timer-based delay loop, resolution 333ns
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 715827882841ns
clocksource mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 637086815595 ns
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 6.00 BogoMIPS (lpj=30000)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
/cpus/cpu@0 missing clock-frequency property
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x80008280 - 0x800082d8
Brought up 1 CPUs
SMP: Total of 1 processors activated (6.00 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
device-tree: Duplicate name in lcdif@021c8000, renamed to "display#1"
VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
clocksource jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
cpuidle: using governor menu
hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 8 bytes.
imx6ul-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
imx6ul-pinctrl 2290000.iomuxc-snvs: initialized IMX pinctrl driver
mxs-dma 1804000.dma-apbh: initialized
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
i2c i2c-0: IMX I2C adapter registered
i2c i2c-0: can't use DMA
i2c i2c-1: IMX I2C adapter registered
i2c i2c-1: can't use DMA
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
MIPI CSI2 driver module loaded
Advanced Linux Sound Architecture Driver Initialized.
Bluetooth: Core ver 2.20
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
Switched to clocksource mxc_timer1
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
imx rpmsg driver is registered.
Bus freq driver module loaded
futex hash table entries: 256 (order: 2, 16384 bytes)
VFS: Disk quotas dquot_6.6.0
VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
fuse init (API version 7.23)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
imx-weim 21b8000.weim: Driver registered.
backlight supply power not found, using dummy regulator
MIPI DSI driver module loaded
MIPI DSI driver module loaded
21c8000.lcdif supply lcd not found, using dummy regulator
mxsfb 21c8000.lcdif: failed to find mxc display driver
Console: switching to colour frame buffer device 60x34
mxsfb 21c8000.lcdif: initialized
imx-sdma 20ec000.sdma: no event needs to be remapped
imx-sdma 20ec000.sdma: loaded firmware 3.3
imx-sdma 20ec000.sdma: initialized
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 18, base_baud = 5000000) is a IMX
console [ttymxc0] enabled
21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 235, base_baud = 5000000) is a IMX
imx-rng 2284000.rngb: iMX RNG Registered.
imx sema4 driver is registered.
[drm] Initialized drm 1.1.0 20060810
[drm] Initialized vivante 1.0.0 20120216 on minor 0
brd: module loaded
loop: module loaded
fsl-quadspi 21e0000.qspi: unrecognized JEDEC id bytes: ff, ff, ff
fsl-quadspi 21e0000.qspi: Freescale QuadSPI probe failed
spi_gpio spi4: gpio-miso property not found, switching to no-rx mode
CAN device driver interface
flexcan 2090000.can: device registered (reg_base=a09f8000, irq=27)
flexcan 2094000.can: device registered (reg_base=a0a00000, irq=28)
20b4000.ethernet supply phy not found, using dummy regulator
pps pps0: new PPS source ptp0
libphy: fec_enet_mii_bus: probed
fec 20b4000.ethernet eth0: registered PHC device 0
2188000.ethernet supply phy not found, using dummy regulator
pps pps1: new PPS source ptp1
fec 2188000.ethernet eth1: registered PHC device 1
usbcore: registered new interface driver asix
usbcore: registered new interface driver ax88179_178a
usbcore: registered new interface driver cdc_ether
usbcore: registered new interface driver net1080
usbcore: registered new interface driver cdc_subset
usbcore: registered new interface driver zaurus
usbcore: registered new interface driver cdc_ncm
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-mxc: Freescale On-Chip EHCI Host driver
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usb_ehset_test
2184800.usbmisc supply vbus-wakeup not found, using dummy regulator
2184000.usb supply vbus not found, using dummy regulator
2184200.usb supply vbus not found, using dummy regulator
ci_hdrc ci_hdrc.1: EHCI Host Controller
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
input: 20cc000.snvs:snvs-powerkey as /devices/platform/soc/2000000.aips-bus/20cc000.snvs/20cc000.snvs:snvs-powerkey/input/input0
input: iMX6UL TouchScreen Controller as /devices/platform/soc/2000000.aips-bus/2040000.tsc/input/input1
read sensor who am i (0x0)error !
fxls8471: probe of 0-001e failed with error -22
snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as rtc0
i2c /dev entries driver
IR NEC protocol handler initialized
IR RC5(x/sz) protocol handler initialized
IR RC6 protocol handler initialized
IR JVC protocol handler initialized
IR Sony protocol handler initialized
IR SANYO protocol handler initialized
IR Sharp protocol handler initialized
IR MCE Keyboard/mouse protocol handler initialized
IR XMP protocol handler initialized
pxp-v4l2 pxp_v4l2: initialized
0-000e supply vdd not found, using dummy regulator
0-000e supply vddio not found, using dummy regulator
mag3110 0-000e: check mag3110 chip ID
mag3110 0-000e: read chip ID 0xfffffffb is not equal to 0xc4!
mag3110: probe of 0-000e failed with error -22
imx2-wdt 20bc000.wdog: use WDOG_B to reboot.
imx2-wdt 20bc000.wdog: timeout 60 sec (nowayout=0)
Bluetooth: HCI UART driver ver 2.3
Bluetooth: HCI UART protocol H4 registered
Bluetooth: HCI UART protocol BCSP registered
Bluetooth: HCI UART protocol ATH3K registered
usbcore: registered new interface driver bcm203x
usbcore: registered new interface driver btusb
usbcore: registered new interface driver ath3k
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
/soc/aips-bus@02100000/usdhc@02190000: voltage-ranges unspecified
sdhci-esdhc-imx 2190000.usdhc: Got CD GPIO
sdhci-esdhc-imx 2190000.usdhc: No vqmmc regulator found
mmc0: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
/soc/aips-bus@02100000/usdhc@02194000: voltage-ranges unspecified
sdhci-esdhc-imx 2194000.usdhc: No vmmc regulator found
sdhci-esdhc-imx 2194000.usdhc: No vqmmc regulator found
usb 1-1: new high-speed USB device number 2 using ci_hdrc
mmc1: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
mmc0: host does not support reading read-only switch, assuming write-enable
mmc0: new high speed SDHC card at address 1234
fsl-asrc 2034000.asrc: driver registered
mmcblk0: mmc0:1234 SA16G 14.4 GiB
imx-wm8960 sound: wm8960-hifi <-> 202c000.sai mapping ok
imx-wm8960 sound: snd-soc-dummy-dai <-> 2034000.asrc mapping ok
imx-wm8960 sound: wm8960-hifi <-> 202c000.sai mapping ok
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
NET: Registered protocol family 26
mmc1: MAN_BKOPS_EN bit is not set
NET: Registered protocol family 10
sit: IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HIDP socket layer initialized
mmc1: new HS200 MMC card at address 0001
mmcblk1: mmc1:0001 8GTF4R 7.28 GiB
8021q: 802.1Q VLAN Support v1.8
Key type dns_resolver registered
mmcblk1boot0: mmc1:0001 8GTF4R partition 1 4.00 MiB
mmcblk1boot1: mmc1:0001 8GTF4R partition 2 4.00 MiB
mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB
 mmcblk1: p1 p2
dhd_module_init in
snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 1970-01-01 00:00:00 UTC (0)
gpio_dvfs: disabling
can-3v3: disabling
ALSA device list:
  #0: wm8960-audio
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
0100           65536 ram0  (driver?)
0101           65536 ram1  (driver?)
0102           65536 ram2  (driver?)
0103           65536 ram3  (driver?)
0104           65536 ram4  (driver?)
0105           65536 ram5  (driver?)
0106           65536 ram6  (driver?)
0107           65536 ram7  (driver?)
0108           65536 ram8  (driver?)
0109           65536 ram9  (driver?)
010a           65536 ram10  (driver?)
010b           65536 ram11  (driver?)
010c           65536 ram12  (driver?)
010d           65536 ram13  (driver?)
010e           65536 ram14  (driver?)
010f           65536 ram15  (driver?)
b300        15114240 mmcblk0  driver: mmcblk
b308         7634944 mmcblk1  driver: mmcblk
  b309           40960 mmcblk1p1 33dbcda5-01
  b30a         7589888 mmcblk1p2 33dbcda5-02
b320             512 mmcblk1rpmb  (driver?)
b318            4096 mmcblk1boot1  (driver?)
b310            4096 mmcblk1boot0  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

会启动linux内核,最后停止,由于没有根文件系统。
(driver?)
0109 65536 ram9 (driver?)
010a 65536 ram10 (driver?)
010b 65536 ram11 (driver?)
010c 65536 ram12 (driver?)
010d 65536 ram13 (driver?)
010e 65536 ram14 (driver?)
010f 65536 ram15 (driver?)
b300 15114240 mmcblk0 driver: mmcblk
b308 7634944 mmcblk1 driver: mmcblk
b309 40960 mmcblk1p1 33dbcda5-01
b30a 7589888 mmcblk1p2 33dbcda5-02
b320 512 mmcblk1rpmb (driver?)
b318 4096 mmcblk1boot1 (driver?)
b310 4096 mmcblk1boot0 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
—[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)


会启动linux内核,最后停止,由于没有根文件系统。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将U-Boot 2021移植到i.MX6ULL上,需要进行以下步骤: 1. 获取U-Boot 2021源代码,并解压缩。 2. 进入U-Boot源代码目录,执行make mx6ull_config命令,生成配置文件。 3. 执行make命令编译U-Boot。 4. 将编译好的U-Boot烧录到i.MX6ULL的启动设备上,例如SD卡或eMMC。 5. 在i.MX6ULL上启动U-Boot,可以通过串口或网络连接进行调试和配置。 需要注意的是,U-Boot移植需要根据具体的硬件平台进行调整和配置,例如时钟、存储器、网络等参数。同时,还需要根据具体的应用场景进行功能定制和优化。 ### 回答2: 如何移植uboot2021到imx6ull平台上呢?这里主要分为以下几个步骤: 1. 准备工作:获取uboot2021源码,编译工具链及imx6ull开发板。 2. 配置uboot:将uboot源码解压到本地目录,进入该目录执行make distclean命令清除旧的编译结果,接着执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_defconfig命令生成初始配置文件,该命令将生成一个.config文件,保存uboot的各种配置选项。若需要重新配置uboot,可以执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig命令,进入ncurses界面进行配置。 3. 编译uboot:执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-命令编译uboot。编译完成后会生成u-boot.bin文件及其他相关文件。 4. 烧写uboot:将编译好的u-boot.bin文件烧写到imx6ull开发板上,可以使用JTAG或SD卡等方式进行烧写操作。 5. 测试uboot:烧写完成后重启开发板,在uboot命令行模式下执行命令,如printenv、boot等,验证uboot是否能够正常工作。 在这个过程中需要注意以下几点: 1. 在配置uboot时,需要参考imx6ull开发板的硬件配置文件进行相应的配置,如串口、网卡等。 2. 在编译uboot时,需要指定交叉编译工具链的路径及前缀,例如arm-linux-gnueabihf-。 3. 在烧写uboot前,需要确保imx6ull开发板已处于烧写模式,并准备好相应的烧写工具。 总结来说,移植uboot2021到imx6ull平台上需要对uboot进行配置、编译和烧写等操作,需要了解相关的硬件配置和交叉编译工具链等知识,同时需要注意进行正确的操作步骤和验证步骤。 ### 回答3: imx6ull是一款基于ARM Cortex-A7架构的嵌入式处理器,它广泛应用于物联网、智能家居、医疗设备等领域。移植U-Boot可以为imx6ull的开发和应用提供更多的功能和扩展性。本文将介绍如何移植U-Boot 2021到imx6ull平台上。 移植步骤: 1. 准备工具和环境:交叉编译工具、串口调试器和开发板。安装交叉编译工具,设置环境变量。 2. 下载U-Boot源码,并解压缩。 3. 选择imx6ull配置文件:从U-Boot源码中找到与imx6ull对应的配置文件,具体位置在“configs/”目录下。可以通过“make menuconfig”命令进行配置,或者手动复制对应的配置文件到“config/”目录下。 4. 编译U-Boot:执行“make”命令进行编译,输出“u-boot.bin”文件。 5. 烧录U-Boot:通过串口调试器将U-Boot烧录到开发板的Flash中。连接串口调试器,并使用命令“sudo minicom -s”打开串口设置界面。设置串口设备、波特率等参数,保存退出。使用“sudo minicom”命令即可进入串口终端,输入“Ctrl + C”进入U-Boot命令行模式。通过“mmc dev 0”和“mmc part”命令设置分区和卡设备。使用“fatls mmc 0:1”或“ext2ls mmc 0:1”查看文件系统,确认烧录地址和文件名。 6. 烧录软件:使用命令“fatload mmc 0:1 ${loadaddr} u-boot.bin”将U-Boot软件烧录到开发板中,然后通过“go ${loadaddr}”命令运行U-Boot。 注意事项: 1. 在选择配置文件时,要注意选择与开发板硬件一致的配置文件,否则可能会出现不可预知的问题。 2. 在烧录过程中,注意确认文件名和烧录地址是否正确,以免造成不可恢复的损失。 3. 在调试过程中,可以使用“printenv”命令查看环境变量,使用“setenv”命令设置和修改环境变量。 总结: 移植U-Boot需要使用交叉编译工具和串口调试器,选取开发板对应的配置文件,然后进行编译和烧录。在调试过程中要注意环境变量和文件名,避免出现不可预知的问题。U-Boot为开发者提供了更多的扩展性和功能,可以大大提高开发效率和应用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值