1)从DDR地址0x82000000加载内核镜像

hisilicon # bootm 82000000
## Booting kernel from Legacy Image at 82000000 ...Image Name:   Linux-4.9.37Image Type:   ARM Linux Kernel Image (uncompressed)Data Size:    2206715 Bytes = 2.1 MiBLoad Address: 80008000Entry Point:  80008000Loading Kernel Image ... OK
OKStarting kernel ...

信息:内核为Linux-4.9.37,内核入口为DDR地址0x80008000。

镜像移动记录

刷机:SD卡 → DDR 0x82000000 → Flash 80000~280000

启动内核:Flash 80000~280000 → DDR 0x82000000 → 解压镜像文件到DDR 80008000

发现一个问题:uImage_kernel > 2MB,而Flash 80000~280000只分配了2MB。按道理应该会加载失败,或镜像文件不完整。但实际启动过程中又没有出现问题。

内核文件是vmlinux;zImage = 压缩的vmlinux + 一段解压启动代码;

uImage = zImage + 64字节头部信息(内核版本+加载位置+生成时间、大小等信息)

2)CPU信息

Booting Linux on physical CPU 0x0
Linux version 4.9.37 (root@virtual) (gcc version 6.2.1 20161016 (Hisilicon_v510_20180120) ) #5 Mon Sep 7 14:09:21 CST 2020
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f

① 启动CPU0,内核版本和编译信息

②CPU信息ARM926EJ-S,ARM-v5TEJ,

3)缓冲方式和设备树

CPU: VIVT data cache, VIVT instruction cache
OF: fdt:Machine model: Hisilicon HI3518EV20X DEMO Board

CPU缓存方式为VIVT,使用虚拟地址索引域和虚拟地址的标记域。More:https://blog.csdn.net/Q_AN1314/article/details/78980191

FDT:Flattened Device Tree即扁平设备树,方便管理内核其他子系统、设备。

设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)。它的出现可以实现驱动代码和设备的硬件信息相互的隔离,减小了代码的耦合性。

驱动代码只要负责处理逻辑,而关于一些板级信息则放到设备树文件中,这样即使硬件接口信息变化,也不需要修改驱动逻辑,提高了驱动代码的复用性

More:https://blog.csdn.net/kunkliu/article/details/82846713

Memory policy: Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
Kernel command line: mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:512K(boot),2560K(kernel),13M(rootfs)

内存策略:数据缓存写回,即空闲时数据从cache中写回磁盘或主存。

4)

创建进程pid、文件inode、dentry cache(简称dcache,目录项高速缓存)的哈希表

PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

内核将所有进程存储在任务列表中,任务列表是一个循环双向链表。

我们要想通过pid找到要杀死的进程,一般来说需要遍历链表,然后删除节点;但如果将进程号和进程节点的映射关系添加到一个哈希表中,那么通过pid,我们可以用O(1)的时间找到对应进程节点,将其从链表中删除。(类似LRU,链表+哈希表映射)

5)内存区布局和内存管理

Memory: 26432K/32768K available (4317K kernel code, 143K rwdata, 944K rodata, 160K init, 228K bss, 6336K reserved, 0K cma-reserved)
Virtual kernel memory layout:vector  : 0xffff0000 - 0xffff1000   (   4 kB)fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)vmalloc : 0xc2800000 - 0xff800000   ( 976 MB)lowmem  : 0xc0000000 - 0xc2000000   (  32 MB)modules : 0xbf000000 - 0xc0000000   (  16 MB).text : 0xc0008000 - 0xc043fa20   (4319 kB).init : 0xc054c000 - 0xc0574000   ( 160 kB).data : 0xc0574000 - 0xc0597ea0   ( 144 kB).bss : 0xc0597ea0 - 0xc05d0ff8   ( 229 kB)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

内核管理页面使用了2个算法:伙伴算法和SLUB算法,伙伴算法以页为单位管理内存,但在大多数情况下,程序需要的并不是完整的一页,而几个、几十个字节的小内存。

于是需要另一套系统来完成对小内存的管理,这就是slub系统。slub把一个4K内存页进行分组管理,每个组分别包含2^3、2^4、 …2^11个字节,和96B、192B,共有11个组。

Slub就相当于零售商,它向伙伴系统“批发”内存,然后再零售给出去。

SLUB算法原文:https://blog.csdn.net/lukuen/article/details/6935068

6)部分子系统和组件的初始化、外设和网络协议初始化

NR_IRQS:16 nr_irqs:16 16
VIC @fe0d0000: id 0x00641190, vendor 0x41
clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 637086815595 ns
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 715827882841ns
Console: colour dummy device 80x30
Calibrating delay loop... 269.10 BogoMIPS (lpj=1345536)
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
Setting up static identity map for 0x80008400 - 0x80008458
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: -1, 3072 bytes)pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
Serial: AMBA PL011 UART driver
20080000.uart: ttyAMA0 at MMIO 0x20080000 (irq = 21, base_baud = 0) is a PL011 rev2
console [ttyAMA0] enabled
SCSI subsystem initialized
ssp-pl022 200c0000.spi: ARM PL022 driver, device ID: 0x00800022
ssp-pl022 200c0000.spi: mapped registers from 0x200c0000 to fe1c0000
ssp-pl022 200e0000.spi: ARM PL022 driver, device ID: 0x00800022
ssp-pl022 200e0000.spi: mapped registers from 0x200e0000 to fe1e0000
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
clocksource: Switched to clocksource arm,sp804NET: Registered protocol family 2
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 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.
workingset: timestamp_bits=30 max_order=13 bucket_order=0
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
NET: Registered protocol family 38Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered
io scheduler deadline registered (default)
io scheduler cfq registered
pinctrl-single 200f0000.pinmux: 66 pins at pa fe1f0000 size 264
pinctrl-single 200f0800.pinconf: 76 pins at pa fe1f0800 size 304
pl061_gpio 20140000.gpio_chip: PL061 GPIO chip @0x20140000 registered
.......
pl061_gpio 201c0000.gpio_chip: PL061 GPIO chip @0x201c0000 registered

futext(fast userspace mutext),是Linux的一个基础组件,可以用来构建各种更高级的同步机制,比如锁、信号量等,POSIX信号量就是基于futex构建。

7)加载板级驱动:加载Flash驱动,创建分区、加载RTL8188FTV部分驱动;挂载文件系统

brd: module loaded
hisi-sfc hisi_spi_nor.0: SPI Nor ID Table Version 1.0
hisi-sfc hisi_spi_nor.0: all blocks is unlocked.
hisi-sfc hisi_spi_nor.0: w25q128 (Chipsize 16 Mbytes, Blocksize 64KiB)
3 cmdlinepart partitions found on MTD device hi_sfc
3 cmdlinepart partitions found on MTD device hi_sfc
Creating 3 MTD partitions on "hi_sfc":
0x000000000000-0x000000080000 : "boot"
0x000000080000-0x000000300000 : "kernel"
0x000000300000-0x000001000000 : "rootfs"ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-platform: EHCI generic platform driver
ehci-platform 100b0000.ehci: EHCI Host Controller
ehci-platform 100b0000.ehci: new USB bus registered, assigned bus number 1
ehci-platform 100b0000.ehci: irq 31, io mem 0x100b0000
ehci-platform 100b0000.ehci: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
ohci-platform: OHCI generic platform driver
ohci-platform 100a0000.ohci: Generic Platform OHCI controller
ohci-platform 100a0000.ohci: new USB bus registered, assigned bus number 2
ohci-platform 100a0000.ohci: irq 32, io mem 0x100a0000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
hisi-i2c-hisilicon 200d0000.i2c: Hisilicon [i2c-0] probed!
hisi-i2c-hisilicon 20240000.i2c: Hisilicon [i2c-1] probed!
hisi-i2c-hisilicon 20250000.i2c: Hisilicon [i2c-2] probed!
himci: mmc host probe
himci: mmc host probe
usb 1-1: new high-speed USB device number 2 using ehci-platform
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
hisi-dmac 10060000.hidma-controller: hidmac probe!
NET: Registered protocol family 10
sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
NET: Registered protocol family 17
lib80211: common routines for IEEE802.11 driversmmc0: cannot verify signal voltage switch
himci: tuning mmc0: valid phase shift [0, 6] Final Phase 3
mmc0: new ultra high speed SDR104 SDHC card at address aaaa
mmcblk0: mmc0:aaaa SC16G 14.8 GiB mmcblk0:
VFS: Mounted root (jffs2 filesystem) readonly on device 31:2.
devtmpfs: mounted
Freeing unused kernel memory: 160K (c054c000 - c0574000)
This architecture does not have kernel memory protection.
random: init: uninitialized urandom read (4 bytes read)

RTL8188FTV是一款 802.11b/g/n 2.4G 单芯片,集成了无线局域网 (WLAN) 和网络 USB 接口(兼容 USB 1.0/1.1/2.0)控制器。它在单个芯片中结合了 WLAN MAC、支持 1T1R 的 WLAN 基带和 WLAN RF。 为高吞吐量性能和低功耗的集成无线 LAN 设备提供了完整的解决方案。

8)加载WIFI模块驱动,启动udhcpc服务,挂载SD卡

Wed Jan  1 00:00:00 CST 2020_ _ _ _ _ _ _ _ _ _ _ _\  _  _   _  _ _ ___/ /__/ \ |_// __   /  -  _ ___/ /  / /  / /_ _ _ _/ /  /  \_/  \_ ______
___________\___\__________________[RCS]: /etc/init.d/S00devs
mknod: /dev/console: File exists
mknod: /dev/ttyAMA0: File exists
mknod: /dev/null: File exists
[RCS]: /etc/init.d/S01udev
udev[89]: starting version 167
[RCS]: /etc/init.d/S05dropbear
Not recognise ACTION:change
[RCS]: /etc/init.d/S80network
[RCS]: /etc/init.d/S90wifi
8188eu: loading out-of-tree module taints kernel.
random: fast init done
bFWReady == _FALSE call reset 8051...
usbcore: registered new interface driver rtl8188eu
==> rtl8188e_iol_efuse_patch
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
Successfully initialized wpa_supplicant
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
udhcpc: started, v1.26.2
Setting IP address 0.0.0.0 on wlan0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: no lease, forking to backgroundFAT-fs (mmcblk0): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
mount: mounting /dev/mmcblk0p1 on /mnt/mmcblk0 failed: No such file or directory
mmz_start: 0x82000000, mmz_size: 32M

9)加载流媒体相关模块(海思SDK中提供的,与以后的开发有关)

The sensor_type 'ov9732' !!!
sys config init ok!
Hisilicon Media Memory Zone Manager
Module himedia: init ok
hi3518e_base: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
load sys.ko for Hi3518EV200...OK!
load tde.ko ...OK!
load region.ko ....OK!
load vgs.ko for Hi3518EV200...OK!
ISP Mod init!
load viu.ko for Hi3518EV200...OK!
load vpss.ko ....OK!
load vou.ko ....OK!
load hifb.ko OK!
load rc.ko ...OK!
load venc.ko ...OK!
load chnl.ko for Hi3518EV200...OK!
load h264e.ko ...OK!
load jpege.ko ...OK!
load ive.ko for Hi3518EV200...OK!
load sensor_i2c.ko ...OK!
==== Your input Sensor type is ov9732 ====
load pwm.ko ...OK!
load piris.ko ...OK!
acodec inited!
load hi3518e_aio.ko ...OK!
load ai.ko ...OK!
load ao.ko ...OK!
load aenc.ko ...OK!
load adec.ko ...OK!
insert audio
mipi_init
init phy power successful!
load hi_mipi.ko ...OK!

10)用户登陆

Auto login as root ...
Jan  1 00:00:23 login[190]: root login on 'ttyS000'
Welcome to HiLinux.
None of nfsroot found in cmdline.
~ #

Hi3518ev200:内核启动分析相关推荐

  1. 内核启动分析(三)——zImage 解压缩阶段

          在上阶段,主要是U-BOOT 向内核传递一些参数.而这些参数是通过 struct tag来传递的.U-boot 把要传递给 kernel 的东西保存在 struct tag 数据结构中,启 ...

  2. uboot源码——内核启动分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6403863.html 总结:uboot启动linux内核的整个 ...

  3. 第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)...

    内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘.D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现 ...

  4. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  5. linux内核启动分析(一)

    文章目录 1.HEAD 1.preserve_boot_args 1.1 __inval_dcache_area 2.el2_setup 3. set_cpu_boot_mode_flag 4. __ ...

  6. u-boot内核启动分析

    菜单的实现函数 - cmd_menu.c pc机上都有分区,但是在嵌入式设备中的flash没有分区 所谓的嵌入式中的分区就是使用代码进行写死 sourceinsight 中搜索函数的快捷键是: Alt ...

  7. Linux内核启动流程分析(一)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...

  8. 低温linux内核启动readl,Linux内核启动流程分析(一)

    很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接粘过来的有点乱,敬请谅解! S3C2410 Linux 2.6.35.7启动分析(第一阶段) 1.依据arch/ar ...

  9. 通过从代码层面分析Linux内核启动来探知操作系统的启动过程

    通过从代码层面分析Linux内核启动来探知操作系统的启动过程 前言说明 本篇为网易云课堂Linux内核分析课程的第三周作业,我将围绕Linux 3.18的内核中的start_kernel到init进程 ...

最新文章

  1. 条款11 在operator=中处理“自我赋值”
  2. 详解协方差与协方差矩阵计算
  3. 关于网站购物车的实现的思考
  4. Linux下的文件共享全攻略系列之三:主流FTP服务器Wu-ftpd入门指南
  5. 181116每日一句
  6. 对接网络摄像头——使用RTSP协议进行取流
  7. 用Python推送书籍到Kindle
  8. 网页国际化处理(中英文切换)
  9. pwm控制直流电机转速流程图_直流电机PWM控制原理
  10. linux下看学校的IPTV
  11. 八、JUC强大的辅助类
  12. 利用YOLO实现自己的目标检测
  13. 小米刷入Recovery
  14. 怎么发现不了同一网络的其他计算机,局域网中看不到其他计算机怎么办
  15. 巴菲特致股东的一封信:2003年
  16. Vue之jwt(跨域身份验证,令牌)
  17. 大家都怎么评价自己的研究生导师?
  18. shiro反序列化漏洞学习(工具+原理+复现)
  19. k8s UAT改环境
  20. 4-hive 表概念

热门文章

  1. ISO 5659-2塑料 烟生成 第2 部分:单室法测定烟密度试验方法
  2. Object转boolean类型,Object转int类型,打包报错,提示:object找不到int
  3. WebInspect评估版试用第1天
  4. C语言string库函数介绍(附模拟实现)
  5. c#使用NPOI批量导出数据到excel表格里
  6. 图片压缩算法,保证图片不失真
  7. 细粒度分类:Diversified Visual Attention Networks
  8. 安装VM15搭建centos7踩坑记录。
  9. VM15虚拟机+Linux-CentOS7安装教程
  10. 关于知网学位论文检测系统的说明及修改指导意见