LS1021ATWR开发板启动日志分析

本文详细分析了LS1021ATWR开发板的启动日志,涉及Linux和U-Boot两个阶段。日志显示了系统硬件配置,如CPU频率、DDR内存速度、总线频率等,并记录了网络接口状态、硬盘和SD卡信息。在Linux启动阶段,展示了内核初始化、设备探测和网络设备配置。启动过程中,还涉及到固件更新、看门狗设置以及网络设备如eTSEC和e1000的工作模式。最终,系统成功启动OpenWrt并进入用户交互模式。
摘要由CSDN通过智能技术生成

一.背景

LS1021ATWR开发板运行官方的openwrt系统

 

二.日志分析

2.1 linux相关日志

root@OpenWrt:/# reboot  重启

root@OpenWrt:/# [ 2324.325719] device eth0 left promiscuous mode 网卡eth0离开混杂模式

[ 2324.330172] br-lan: port 1(eth0) entered disabled state 网卡eth0进入禁用状态

[ 2324.346789] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready 网卡eth0没有准备好(eth0已被设置成禁用状态,那当然就没准备好咯,个人理解,后期要验证正确性)

[ 2328.827364] kvm: exiting hardware virtualization 退出kvm的硬件虚拟化

[ 2328.832026] sd 0:0:0:0: [sda] Synchronizing SCSI cache 同步scsi缓存,也就是在重启之前保存数据,以免数据丢失

[ 2328.839657] imx2-wdt 2ad0000.watchdog: Device shutdown: Expect reboot! 设备关闭,看门狗期待重启

[ 2328.886907] reboot: Restarting system 重启系统

 

2.2 uboot相关日志 

U-Boot 2016.092.0+g199df35 (Nov 20 2016 - 12:55:53 +0800)

CPU:   Freescale LayerScape LS1021E, Version: 2.0, (0x87081120)  CPU为飞思卡尔的layerscape LS1021E芯片,不是LS1021A吗? print_cpuinfo(),arch/arm/cpu/armv7/ls1021xa/cpu.c,CONFIG_DISPLAY_CPUINFO,涉及到系统版本寄存器SVR(system version register),从寄存器中读取了various personality字段,字段中的值为0x11,表示LS1021A 芯片,E表示带有安全模块的LS1021A芯片

Clock Configuration:

       CPU0(ARMV7):1000 MHz, CPU0的频率被配置为1000MHz,那么CPU1怎么没被配置,难道并没有使用它?需要确认 ,print_cpuinfo()

       Bus:300  MHz, DDR:800  MHz (1600 MT/s data rate), 总线频率为300MHz,DDR频率为800MHz,1600 MT/s表示每秒1600兆次数据传输,反映单位时间内的传输速度,T表示Times,为什么是1600,因为HT是双向传输,所以除以2就是单向传输的速率,也就是频率800MHz,HT表示端到端总线技术,即HyperTransport print_cpuinfo()

Reset Configuration Word (RCW):   重置配置字,是芯片复位之后在程序执行过程中需要使用到的硬件配置信息,包括系统时钟、DDR时钟、serdes配置、启动方式、GPIO复用配置等,RCW存储在flash或sd卡的何处呢?这个需要查看芯片手册中的Starting Address,print_cpuinfo(),以下是RCW状态寄存器的信息,一共有16个这样的寄存器,一个寄存器4个字节,那么16个这样的寄存器就是4*16*8 = 512 bit

       00000000: 0608000a 00000000 00000000 00000000

       00000010: 30000000 00007900 e0025a00 21046000

       00000020: 00000000 00000000 00000000 18000000

       00000030: 00080000 481b7340 00000000 00000000

Model: LS1021A TWR Board  型号为LS1021A TWR Board  ,这个值是从device tree中获得,show_board_info(),获取的标记为model;

Board: LS1021ATWR 板子为LS1021ATWR checkboard(),board/freescale/ls1021/atwr/ls1021atwr.c

CPLD:  V3.0  复杂可编程逻辑器件(Complex Programmable Logic Device),cpld_show(),board/freescale/ls1021/atwr/ls1021atwr.c

PCBA:  V2.0 指已经在PCB空板上贴片好所有元器件的板子(PCB Assembly), cpld_show()

VBank: 0   vbank是一个寄存器名字,属于CPLD上的寄存器,用来表明选择的是flash的哪个bank,此处选择的是bank0,寄存器的bit[0]来表示bank的范围,因此此bit只有两个值,0表示从bank0(upper bank)启动,1表示从bank1(lower bank)启动, cpld_show()

I2C:   ready   I2C准备妥当(Inter-Integrated Circuit) ,init_func_i2c(),common/board_f.c,初始化i2c,该函数被填充到init_sequence_f数组中

DRAM:  1 GiB  内存为1GiB(Dynamic Random Access Memory)  dram_init(),board/freescale/ls1021atwr/ls1021atwr.c,“DRAM:“由announce_dram_init()输出, show_dram_config()输出内存大小,common/board_f.c

Using SERDES1 Protocol: 48 (0x30)   使用SERDES1协议,是一种时分多路复用(TDM:Time Division Multiplexing)、点对点(P2P:Point to Point)的串行通信技术,(Serializer/Deserializer串行器解串器),serdes_init(),arch/arm/cpu/armv7/fsl_lsl_serdes.c,0x30从LS1021ARM.pdf中可以得知其表明支持的网络协议为:PCIe1(x1)、SATA1、SGMII1、SGMII2

Firmware 'Microcode version 0.0.1 for LS1021a r1.0' for 1021 V1.0  固件,u_qe_upload_firmware(),drivers/qe/qe.c 上传微代码到指令RAM的指定地址,详情查看docs/README.qe_firmware中针对QE微代码上传的信息;

QE: uploading microcode 'Microcode for LS1021a r1.0' version 0.0.1 上传微代码?什么意思?需要确认(QUICC Engine),qe_upload_microcode(),drivers/qe/qe.c,属于qe_upload_firmware中的worker函数,实际做的就是上传微代码;

Flash: 128 MiB flash大小为128MiB,这个远程开发板上还插着一个320GiB的硬盘

MMC:   FSL_SDHC: 0 插着一个容量为16GiB的sd卡,实际容量14.5 GiB

EEPROM: NXID v16777216 具有一个eeprom  ,mac_read_from_eeprom(),board/freescale/common/sys_eeprom.c,此函数在init_sequence_r数组中

In:    serial 串口输入   console_init_r(),common/board_r.c->stdio_print_current_devices(),common/console.c,

Out:   serial 串口输出

Err:   serial 错误也由串口输出

SEC0: RNG instantiated RNG实例化了,SEC0是安全相关的硬件模块(SEC:security,RNG:Random Number Generators,随机数生成器),misc_init_r(),board/freescale/ls1021atwr/ls1021atwr.c->sec_init(),board/freescale/ls1021atwr/ls1021atwr.c

Target spinup took 0 ms.  ahci_host_init(),drivers/ata/ahci.c,驱动提供scsi接口给sata

AHCI 0001.0300 1 slots 1 ports ? Gbps 0x1 impl SATA mode   1个sata插槽,1个接口,多少Gbps,1次impl,SATA 模式,ahci_print_info(),drivers/ata/ahci.c,(AHCI:Advanced Host Controller Interface)

flags: 64bit ncq pm clo only pmp fbss pio slum part ccc  当前硬盘具有什么样的能力

Found 1 device(s).  找到一个硬盘,scsi_scan(),drivers/scsi/scsi.c

SCSI:  Net:   eTSEC1 is in sgmii mode.   “SCSI:”由Initr_scsi()输出,drivers/scsi/scsi.c;”Net:” 由initr_net输出,common/board_r.c->eth_initialize(),net/eth_legacy.c

eTSEC2 is in sgmii mode.  eth_initialize(),net/eth-legacy.c ->board_eth_init(),board/freescale/ls1021atwr/ls1021atwr.c

PCIe0: pcie@3400000 Root Complex: x1 gen1    ls_pcie_probe(),drivers/pci/pcie_layerscape.c,这里共分两个地方打印,第一次打印”PCIe0: pcie@3400000 Root Complex”,第二次打印”:x1 gen1”,表示一路PCIe,第一代速度

PCIe1: pcie@3500000 disabled   ls_pcie_probe(),PCIe1被禁止

e1000: 00:15:17:80:ae:56   pci_eth_init(),include/netdev.h->e1000_initialize(),drivers/net/e1000.c->e1000_init_one

       eTSEC1, eTSEC2, eTSEC3, e1000#0 [PRIME]  eth_initialize(),net/eth_legacy.c,”e1000#0”是在e1000_name()中生成的,drivers/net/e1000.c

Hit any key to stop autoboot:  0                     run_main_loop(),common/board_r.c->main_loop(),common/main.c->bootdelay_process(),common/autoboot.c->menu_show()->bootmenu_show()->bootmenu_choice_entry()->bootmenu_autoboot_loop(),cmd/bootmenu.c,run_main_loop()函数被放在init_sequence_r数组中

Now switch to boot from flash bank 1.        flash_bank_cmd(),board/freescale/ls1021atwr/ls1021atwr.c->convert_flash_bank(),board_freescale/ls1021atwr/ls1021atwr.c

Reset board to enabl

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值