历史上的今天
返回首页

历史上的今天

今天是:2024年12月30日(星期一)

正在发生

2020年12月30日 | I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之根文件系统挂载

2020-12-30 来源:eefocus

经过前面的移植,新版BSP的uboot和kernel已经能够在tqimx6q开发板上运行了,接下来我们来挂载文件系统。


DTB整理


前面的文章中提到,新版BSP的DTB管理感觉不是太好,在之前移植的BSP上我发现即便有根文件系统,内核也会挂掉,由于原来的DTS文件中配置内容太多,不好确定问题的源头,本文对DTS进行了整理,整理后只需要一个DTS文件,其内容如下:


/*

 * Copyright 2012 Freescale Semiconductor, Inc.

 * Copyright 2011 Linaro Ltd.

 *

 * The code contained herein is licensed under the GNU General Public

 * License. You may obtain a copy of the GNU General Public License

 * Version 2 or later at the following locations:

 *

 * http://www.opensource.org/licenses/gpl-license.html

 * http://www.gnu.org/copyleft/gpl.html

 */

 

 

/dts-v1/;

 

 

#include "imx6q.dtsi"

 

 

/ {

model = "Freescale i.MX6 Quad SABRE Smart Device Board";

compatible = "fsl,imx6q-sabresd", "fsl,imx6q";

 

 

memory {

reg = <0x10000000 0x80000000>;

};

};

 

 

&uart1 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart1_2>;

status = "okay";

};

 

 

&usdhc2 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_usdhc2_2>;

cd-gpios = <&gpio1 4 0>;

wp-gpios = <&gpio1 2 0>;

no-1-8-v;

keep-power-in-suspend;

enable-sdio-wakeup;

status = "okay";

};

 

 

&iomuxc {

pinctrl-names = "default";

 

 

uart1 {

pinctrl_uart1_2: uart1grp-2 {

fsl,pins = <

MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1

MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1

>;

};

};

};


同时,需要将imx6qdl.dtsi恢复到前文改动之前的状态,因为代码是使用git管理的,因此,可以使用如下指令恢复:

git checkout imx6qdl.dtsi

制作启动SD卡

根文件系统的制作方法本文就不再赘述了,可以参考本博客S5PV210相关的记载。本人将制作好的根文件系统打包上传到网盘,如果您也懒得重新制作根文件系统可以暂时使用鄙人制作的的这个:


Freescale I.MX6Q BSP移植资料整理


下面开始制作启动SD卡:


Step1. 使用fdisk命令对SD卡进行分区


其实,移植3.0内核版本的BSP时已经使用过fdisk命令,与之前的不同是分区的起始offset改在20M的位置上,具体如下:


(1) 启动分区指令


其中sdb请根据自己的实际情况制定,执行之前一定要再三确认好,以免误操作导致文件丢失。


sudo fdisk /dev/sdb

(2) 切换到sector模式

按u然后回车,重复操作直至切换到sector模式。


(3) 删除既有分区


按d然后回车,重复操作直至删除所有分区。


(4) 创建新分区


按n创建新分区。


(5) 执行分区类型。


按p选择为主分区。


(6) 输入起始偏移


输入"+20M",指定该分区的起始位置是20M的位置上。


(7) 输入结束偏移


本文仅使用了一个分区,故直接按回车,表示该分区的结束位置是磁盘的末尾。


(8) 保存分区信息


按w然后回车,即可保存分区信息。


Step2. 格式化分区


使用mkfs命令格式化新创建的分区,对于移动设备,可以考虑使用ext3或者ext4文件系统,指令如下:


sudo mkfs.ext3 /dev/sdb1

或者

sudo mkfs.ext4 /dev/sdb1

Step3. 拷贝根文件系统


由于本人之前制作好的根文件系统是个压缩包,故直接解压到该分区即可。


sudo mount /dev/sdb1 /mnt

sudo tar jxf rootfs.tar.bz2 -C /mnt

sudo mv /mnt/rootfs/* /mnt

sudo rm /mnt/rootfs

sudo umount /mnt

至此,就完成了根文件系统的制作。

配置uboot环境变量


setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p1 rw init=/linuxrc'

setenv bootcmd 'mmc dev 0; mmc read 0x11ffffc0 0x800 0x3000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'

saveenv

之后重启开发板即可。

效果展示


启动Log如下:


U-Boot 2013.04-04987-g98fdbdc-dirty (May 03 2015 - 11:46:24)

 

CPU:   Freescale i.MX6Q rev1.2 at 792 MHz

CPU:   Temperature 27 C, calibration data: 0x54e4bb69

Reset cause: POR

Board: MX6Q/SDL-SabreSD

I2C:   ready

DRAM:  1 GiB

MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2

No panel detected: default to Hannstar-XGA

Display: Hannstar-XGA (1024x768)

In:    serial

Out:   serial

Err:   serial

mmc0 is current device

Net:   Phy not found

PHY reset timed out

FEC [PRIME]

Warning: failed to set MAC address

 

Normal Boot

Hit any key to stop autoboot:  0 

mmc0 is current device

 

MMC read: dev # 0, block # 2048, count 12288 ... 12288 blocks read: OK

 

MMC read: dev # 0, block # 20480, count 2048 ... 2048 blocks read: OK

## Booting kernel from Legacy Image at 11ffffc0 ...

   Image Name:   Linux-3.10.17-80739-g33597e3-dir

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    5289224 Bytes = 5 MiB

   Load Address: 12000000

   Entry Point:  12000000

   Verifying Checksum ... OK

## Flattened Device Tree blob at 18000000

   Booting using the fdt blob at 0x18000000

   XIP Kernel Image ... OK

OK

   Using Device Tree in place at 18000000, end 1800befb

 

Starting kernel ...

 

Booting Linux on physical CPU 0x0

Linux version 3.10.17-80739-g33597e3-dirty (lilianrong@lenovo) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-12ubuntu1) ) #1 SMP PREEMPT Sun May 3 11:31:37 CST 2015

CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d

CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache

Machine: Freescale i.MX6 Quad/DualLite (Device Tree), model: Freescale i.MX6 Quad SABRE Smart Device Board

cma: CMA: reserved 320 MiB at 3c000000

Memory policy: ECC disabled, Data cache writealloc

PERCPU: Embedded 8 pages/cpu @814f8000 s8896 r8192 d15680 u32768

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096

Kernel command line: noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4 init=/linuxrc

PID hash table entries: 4096 (order: 2, 16384 bytes)

Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)

Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)

Memory: 1024MB = 1024MB total

Memory: 697800k/697800k available, 350776k reserved, 0K highmem

Virtual kernel memory layout:

    vector  : 0xffff0000 - 0xffff1000   (   4 kB)

    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)

    vmalloc : 0xc0800000 - 0xff000000   (1000 MB)

    lowmem  : 0x80000000 - 0xc0000000   (1024 MB)

    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)

    modules : 0x7f000000 - 0x7fe00000   (  14 MB)

      .text : 0x80008000 - 0x80be704c   (12157 kB)

      .init : 0x80be8000 - 0x80c2a2c0   ( 265 kB)

      .data : 0x80c2c000 - 0x80c7c260   ( 321 kB)

       .bss : 0x80c7c260 - 0x80ce5434   ( 421 kB)

SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1

Preemptible hierarchical RCU implementation.

NR_IRQS:16 nr_irqs:16 16

L310 cache controller enabled

l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x32070000, Cache size: 1048576 B

sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655ms

CPU identified as i.MX6Q, silicon rev 1.2

Console: colour dummy device 80x30

Calibrating delay loop... 1581.05 BogoMIPS (lpj=7905280)

pid_max: default: 32768 minimum: 301

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

CPU0: thread -1, cpu 0, socket 0, mpidr 80000000

Setting up static identity map for 0x80610608 - 0x80610660

CPU1: Booted secondary processor

CPU1: thread -1, cpu 1, socket 0, mpidr 80000001

CPU2: Booted secondary processor

CPU2: thread -1, cpu 2, socket 0, mpidr 80000002

CPU3: Booted secondary processor

CPU3: thread -1, cpu 3, socket 0, mpidr 80000003

Brought up 4 CPUs

SMP: Total of 4 processors activated (6324.22 BogoMIPS).

CPU: All CPU(s) started in SVC mode.

devtmpfs: initialized

pinctrl core: initialized pinctrl subsystem

regulator-dummy: no parameters

NET: Registered protocol family 16

DMA: preallocated 256 KiB pool for atomic coherent allocations

Use WDOG1 as reset source

syscon 20c8000.anatop: regmap [mem 0x020c8000-0x020c8fff] registered

vdd1p1: 800 <--> 1375 mV at 1125 mV 

vdd3p0: 2800 <--> 3150 mV at 3000 mV 

vdd2p5: 2000 <--> 2750 mV at 2425 mV 

cpu: 725 <--> 1450 mV at 1150 mV 

vddpu: 725 <--> 1450 mV 

vddsoc: 725 <--> 1450 mV at 1200 mV 

syscon 20e0000.iomuxc-gpr: regmap [mem 0x020e0000-0x020e0037] registered

syscon 21bc000.ocotp-ctrl: regmap [mem 0x021bc000-0x021bffff] registered

hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.

hw-breakpoint: maximum watchpoint size is 4 bytes.

imx6q-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver

bio: create slab at 0

mxs-dma 110000.dma-apbh: initialized

i2c-core: driver [max17135] using legacy suspend method

i2c-core: driver [max17135] using legacy resume method

SCSI subsystem initialized

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

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

PTP clock support registered

imx-ipuv3 2400000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)

imx-ipuv3 2800000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)

MIPI CSI2 driver module loaded

Advanced Linux Sound Architecture Driver Initialized.

推荐阅读

史海拾趣

Electro-Term/Hollingsworth公司的发展小趣事

面对全球电子市场的不断变化,Electro-Term公司及时调整了市场布局和战略方向。公司深入分析了不同地区的市场需求和消费者偏好,制定了有针对性的市场推广策略。同时,公司还加强了与国际知名企业的合作,共同开发新技术和产品。这些努力使Electro-Term在全球市场上取得了显著的成绩。

Edsun Laboratories Inc公司的发展小趣事

企业文化是企业发展的灵魂。ECM Electronics Limited.注重企业文化的建设,倡导“诚信、创新、协作、共赢”的价值观。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。通过团队建设活动,增强员工的凝聚力和归属感。正是这些积极向上的企业文化和优秀的团队,为ECM Electronics Limited.的持续发展提供了源源不断的动力。

CP Technology Inc公司的发展小趣事

CP Technology Inc一直注重产品质量和客户服务。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品检测和售后服务,都力求做到精益求精。这种对品质的执着追求赢得了客户的广泛赞誉和口碑传播,为公司的长期发展奠定了坚实基础。

Digital Core Design公司的发展小趣事

随着《古墓丽影》系列游戏的成功,Core Design的团队迅速扩张。当PS2主机即将推出时,索尼和Core Design都对这款新主机充满期待。为了抓住这一机遇,Core Design将“古墓丽影”的制作团队从最初的12人增加到60人,随后又增加到了100人。这一举措展示了Core Design对市场和技术的敏锐洞察力和决心。

DUCATI公司的发展小趣事

随着《古墓丽影》系列游戏的成功,Core Design的团队迅速扩张。当PS2主机即将推出时,索尼和Core Design都对这款新主机充满期待。为了抓住这一机遇,Core Design将“古墓丽影”的制作团队从最初的12人增加到60人,随后又增加到了100人。这一举措展示了Core Design对市场和技术的敏锐洞察力和决心。

Dynex公司的发展小趣事

1996年,Core Design推出了其标志性作品《古墓丽影》。这款游戏以其独特的女主角Lara Croft和精心设计的游戏世界吸引了全球玩家的关注。Lara Croft成为游戏界最具代表性的女性角色之一,而《古墓丽影》系列也成为Core Design最成功的游戏系列之一。这款游戏的成功不仅为Core Design带来了巨大的经济收益,也使其在全球游戏市场上赢得了极高的声誉。

问答坊 | AI 解惑

[视频]C语言视频教程及汇编视频教程(在线观看)

C语言视频教程(在线观看)地址http://219.144.186.220/cyy/汇编语言视频教程(在线观看)地址http://219.144.186.220/hbywjjk/ 大家多多支持,多多努力啊!…

查看全部问答>

DDK编译问题

最近学习驱动程序,有一个进程/线程监视器的代码,我编译通过了,连接的时候出现下面的错误提示: Linking Executable - objfre\\i386\\pmonitor.sys for i386 drivers.obj() : error LNK2019: unresolved external symbol _PsGetCurrentProcessI ...…

查看全部问答>

关于nand flash读写问题

我板子上的芯片是K9f1208,现在有个疑问就是由于该芯片一个page大小为A:256(Bytes) B:256(Bytes) C:16(Bytes),在写这个page的时候,我看到有些代码是直接按如下的方式进行读取的: static void ReadPage(U32 addr, U8 *buf)   //addr表示fl ...…

查看全部问答>

skyeye到底怎么用啊?

我在虚拟机上装了 fadora 7 下载了skyeye-1.3.0_rc1.tar.gz这个文件然后把他解压缩,按照install里的命令把他编译了一下出来个skyeye这个文件,我运行他就出来一个这个符号: (skyeye) 到了这里我能干什么,怎么用啊? …

查看全部问答>

eeworld给的分,慰劳慰劳弟兄们!(0)

eeworld给的分,慰劳慰劳弟兄们!(0) 以后咱好好干活... 我们得好好加油哈!!!…

查看全部问答>

usbkbd例子安装失败,恳请高手解答?

中有一个usbkdb例子,我想看看这个驱动能否用在我的USB键盘上,我修改了inf中的vid和pid ,(用usbviewer查出来的,应该是正确的),然后在属性->设备管理器那边的USB键盘那边点更新驱动,为什么老是提示\"指定的位置不包含有关的硬件信息\" ? 请各位大哥解 ...…

查看全部问答>

编译出错!!

我现在打算移植Linux下的ZEBRA中的OSPF协议到vxWorks下 遇到个编译问题,请教一下 错误提示 make: *** No rule to make target `zebra.h\', needed by `ospf_abr.o\'. Stop. 有文档说可能是破坏了源文件树  不知道什么是源文件树&nbs ...…

查看全部问答>

求助!!!!!!!

WDT_MDLY_32 WDT_ADLY_1000 WDT_MRST_32 WDT_ARST_1000 这4个有什么区别? 请各位高手指教!!!!!…

查看全部问答>

TI M4价格

RT,貌似都很贵啊,这能用?官方网上都是2美元起。这不是要被别人秒杀吗?STM32都够用了,LM4F到底用在什么领域…

查看全部问答>

关于示波器~~

最近在定研究生的课题,大概的就是关于扫频仪(或者示波器)的设计,老师问我们自己决定做整个的仪器还是只做其中的某一小块(关键技术之类的),在这里问问各位大大,该怎么选择呀。。感觉,如果只做关键技术的话,是不是内容太少了呀~~,另外,关 ...…

查看全部问答>