1.1.1. Secondary programloader 1
2.2.1. Hit <SPACE> key to stop autoboot in %2ds\n". 2
3.2.1. emac 可以使用,参考emac的部分功能实现... 3
3.4.5. sunxi_gmac_initialize. 7
3.4.6. sunxi_emac_initialize. 7
3.4.7. sunxi_gmac_resource_get 7
3.4.8. sunxi_gmac_hardware_init 7
-
关键字
-
SPL
- Secondary programloader
- SPL(Secondary programloader)是uboot第一阶段执行的代码。主要负责搬移uboot第二阶段的代码到系统内存(System Ram,也叫片外内存)中运行。是uboot第一阶段执行的代码。 主要负责初始化芯片,搬移uboot第二阶段的代码到内存中运行。 SPL是由固化在芯片内部的ROM引导的。 所谓启动, 就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码到内部RAM中运行。 这里搬移的就是SPL. 在最新版本的uboot中, 可以看到SPL也支持nandflash, SDCARD等多种启动方式。 当SPL本身被搬移到内部RAM中运行时, 它会从nandflash, SDCARD等外部介质中搬移uboot第二阶段的代码到外部内存中。 切记SPL不能太大,不然RomBoot 无法读取完整,有些你写在spl功能无法读到内存,CPU执行不了,满足不了你的需求。
- Secondary programloader
-
FDT
-
-
修改1
-
修改2
-
内容
-
线索
-
调试准备
-
函数引用
- board_r.c
- init_sequence_r
-
1. `initr_trace`:初始化调试信息。
2. `initr_reloc`:将代码和数据从内存的一个位置移动到另一个位置。
3. `initr_caches`:初始化缓存。
4. `initr_reloc_global_data`:将全局数据从内存的一个位置移动到另一个位置。
5. `initr_unlock_ram_in_cache`:解锁缓存中的内存。
6. `initr_barrier`:设置内存屏障。
7. `initr_malloc`:初始化内存分配器。
8. `log_init`:初始化日志系统。
9. `initr_bootstage`:初始化启动阶段。
10. `initr_console_record`:初始化控制台记录。
11. `initr_noncached`:初始化非缓存内存。
12. `initr_of_live`:初始化设备树。
13. `initr_dm`:初始化设备管理器。
14. `initr_board_init`:初始化板子。
15. `set_cpu_clk_info`:设置CPU时钟信息。
16. `efi_memory_init`:初始化EFI内存。
17. `stdio_init_tables`:初始化标准输入输出表。
18. `initr_serial`:初始化串行通信。
19. `initr_announce`:宣布启动信息。
20. `INIT_FUNC_WATCHDOG_RESET`:重置看门狗定时器。
21. `initr_secondary_cpu`:初始化secondary CPU。
22. `mac_read_from_eeprom`:从EEPROM中读取MAC地址。
23. `stdio_add_devices`:添加标准输入输出设备。
24. `initr_jumptable`:初始化跳表。
25. `initr_api`:初始化API。
26. `console_init_r`:初始化控制台。
27. `console_announce_r`:宣布控制台信息。
28. `show_board_info`:显示板子信息。
29. `arch_misc_init`:初始化架构相关的其他内容。
30. `misc_init_r`:初始化其他平台相关的其他内容。
31. `INIT_FUNC_WATCHDOG_RESET`:重置看门狗定时器。
32. `initr_kgdb`:初始化KGDB。
33. `interrupt_init`:初始化中断。
34. `initr_enable_interrupts`:启用中断。
35. `sunxi_fast_burn_key`:烧录密钥。
36. `initr_sunxi_plat`:初始化SUNXI平台。
37. `initr_env`:初始化环境变量。
38. `board_env_late_init`:初始化板子环境变量。
39. `initr_status_led`:初始化状态LED。
40. `timer_init`:初始化定时器。
41. `initr_ethaddr`:初始化以太网地址。
42. `sunxi_burn_key`:烧录密钥。
43. `board_late_init`:板子后期初始化。
44. `initr_scsi`:初始化SCSI。
45. `initr_bbmii`:初始化BitBang MII。
46. `initr_net`:初始化网络。
47. `initr_post`:初始化POST。
48. `initr_pcmcia`:初始化PCMCIA。
49. `initr_ide`:初始化IDE。
50. `last_stage_init`:最后阶段初始化。
51. `initr_mem`:初始化内存。
52. `sunxi_boot_tone_play`:播放启动音。
-
- init_sequence_r
- initr_net
- eth_initialize
- board_eth_init
- sunxi_gmac_initialize
- sunxi_emac_initialize
- sunxi_gmac_resource_get
- sunxi_gmac_hardware_init
- 设置phy delay 时间
- /* * Adjust Tx/Rx clock delay * Tx clock delay: 0~7 * Rx clock delay: 0~31 */ value &= ~(GMAC_TX_DELAY_MASK << GMAC_TX_DELAY_OFFSET); value |= ((chip->tx_delay & GMAC_TX_DELAY_MASK) << GMAC_TX_DELAY_OFFSET); value &= ~(GMAC_RX_DELAY_MASK << GMAC_RX_DELAY_OFFSET); value |= ((chip->rx_delay & GMAC_RX_DELAY_MASK) << GMAC_RX_DELAY_OFFSET);
- sunxi_emac_pinctrl_init
- CCMU 初始化
- board_r.c
- 设备树之谜
-
-
参考资料