<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to RPiCode</title><link>https://sourceforge.net/p/bppdroid/wiki/RPiCode/</link><description>Recent changes to RPiCode</description><atom:link href="https://sourceforge.net/p/bppdroid/wiki/RPiCode/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 18 Sep 2024 12:57:40 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/bppdroid/wiki/RPiCode/feed" rel="self" type="application/rss+xml"/><item><title>RPiCode modified by yuanhy0055</title><link>https://sourceforge.net/p/bppdroid/wiki/RPiCode/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -1,7 +1,18 @@
+### Pi Boot Rom
 ~~~
 strings bootcode.bin | grep BOOT_UART
 sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
 ~~~
+### Boot From TF-SD
+~~~
+setenv fdtfile bcm2709-rpi-2-b.dtb
+mmc dev 0
+fatload mmc 0:1 ${kernel_addr_r} zImage
+fatload mmc 0:1 ${fdt_addr_r} bcm2709-rpi-2-b.dtb
+setenv bootargs earlyprintk console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
+bootz ${kernel_addr_r} - ${fdt_addr_r}
+~~~
+
 [u-boot:启动详细的代码调用流程](https://blog.csdn.net/Wang_XB_3434/article/details/130979224)
 &lt;pre&gt; u-boot.lds:(arch/arm/cpu/u-boot.lds)
&lt;/pre&gt;

&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">yuanhy0055</dc:creator><pubDate>Wed, 18 Sep 2024 12:57:40 -0000</pubDate><guid>https://sourceforge.netfcf06195329dab727099a3dda4f5dfd18cf51491</guid></item><item><title>RPiCode modified by yuanhy0055</title><link>https://sourceforge.net/p/bppdroid/wiki/RPiCode/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -2,8 +2,8 @@
 strings bootcode.bin | grep BOOT_UART
 sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
 ~~~
+[u-boot:启动详细的代码调用流程](https://blog.csdn.net/Wang_XB_3434/article/details/130979224)
 &lt;pre&gt;-u-boot:启动详细的代码调用流程
 u-boot.lds:(arch/arm/cpu/u-boot.lds)
     |--&amp;gt;_start:(arch/arm/lib/vectors.S)
         |--&amp;gt;reset(arch/arm/cpu/armv7/start.S)    
&lt;/pre&gt;

&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">yuanhy0055</dc:creator><pubDate>Sat, 07 Sep 2024 01:21:11 -0000</pubDate><guid>https://sourceforge.net3185bf2473d84229c3d546e240d69b0d13c61589</guid></item><item><title>RPiCode modified by yuanhy0055</title><link>https://sourceforge.net/p/bppdroid/wiki/RPiCode/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -2,3 +2,126 @@
 strings bootcode.bin | grep BOOT_UART
 sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
 ~~~
+&lt;pre&gt;+u-boot:启动详细的代码调用流程
+u-boot.lds:(arch/arm/cpu/u-boot.lds)
+    |--&amp;gt;_start:(arch/arm/lib/vectors.S)
+        |--&amp;gt;reset(arch/arm/cpu/armv7/start.S)    
+            |--&amp;gt;save_boot_params(arch/arm/cpu/armv7/start.S)/*将引导参数保存到内存中*/
+                |--&amp;gt;save_boot_params_ret(arch/arm/cpu/armv7/start.S)
+                    |--&amp;gt;cpu_init_cp15(arch/arm/cpu/armv7/start.S)/*初始化*/
+                    |--&amp;gt;cpu_init_crit(arch/arm/cpu/armv7/start.S)
+                        |--&amp;gt;lowlevel_init(arch/arm/cpu/armv7/lowlevel_init.S)
+                    |--&amp;gt;_main(arch/arm/lib/crt0.S)
+                        |--&amp;gt;board_init_f_alloc_reserve(common/init/board_init.c)/*为u-boot的gd结构体分配空间*/
+                        |--&amp;gt;board_init_f_init_reserve(common/init/board_init.c)    /*将gd结构体清零*/
+                        |--&amp;gt;board_init_f(common/board_f.c)
+                            |--&amp;gt;initcall_run_list(include/initcall.h)    /*初始化序列函数*/
+                                |--&amp;gt;init_sequence_f[](common/board_f.c)    /* 初始化序列函数数组 */
+                                    |--&amp;gt;board_early_init_f(board/freescale/mx6ull_toto/mx6ull_toto.c)/*初始化串口的IO配置*/
+                                    |--&amp;gt;timer_init(arch/arm/imx-common/timer.c)    /*初始化内核定时器，为uboot提供时钟节拍*/
+                                    |--&amp;gt;init_baud_rate(common/board_f.c)        /*初始化波特率*/
+                                    |--&amp;gt;serial_init(drivers/serial/serial.c)    /*初始化串口通信设置*/
+                                    |--&amp;gt;console_init_f(common/console.c)        /*初始化控制台*/
+                                    |--&amp;gt;...
+                        |--&amp;gt;relocate_code(arch/arm/lib/relocate.S)    /*主要完成镜像拷贝和重定位*/
+                        |--&amp;gt;relocate_vectors(arch/arm/lib/relocate.S)/*重定位向量表*/
+                        |--&amp;gt;board_init_r(common/board_r.c)/*板级初始化*/
+                            |--&amp;gt;initcall_run_list(include/initcall.h)/*初始化序列函数*/
+                                |--&amp;gt;init_sequence_r[](common/board_f.c)/*序列函数*/
+                                    |--&amp;gt;initr_reloc(common/board_r.c)    /*设置 gd-&amp;gt;flags,标记重定位完成*/
+                                    |--&amp;gt;serial_initialize(drivers/serial/serial-uclass.c)/*初始化串口*/
+                                        |--&amp;gt;serial_init(drivers/serial/serial-uclass.c)     /*初始化串口*/
+                                    |--&amp;gt;initr_mmc(common/board_r.c)                         /*初始化emmc*/
+                                        |--&amp;gt;mmc_initialize(drivers/mmc/mmc.c)
+                                            |--&amp;gt;mmc_do_preinit(drivers/mmc/mmc.c)
+                                                |--&amp;gt;mmc_start_init(drivers/mmc/mmc.c)
+                                    |--&amp;gt;console_init_r(common/console.c)                /*初始化控制台*/
+                                    |--&amp;gt;interrupt_init(arch/arm/lib/interrupts.c)        /*初始化中断*/
+                                    |--&amp;gt;initr_net(common/board_r.c)                        /*初始化网络设备*/
+                                        |--&amp;gt;eth_initialize(net/eth-uclass.c)
+                                            |--&amp;gt;eth_common_init(net/eth_common.c)
+                                                |--&amp;gt;phy_init(drivers/net/phy/phy.c)
+                                            |--&amp;gt;uclass_first_device_check(drivers/core/uclass.c)
+                                                |--&amp;gt;uclass_find_first_device(drivers/core/uclass.c)
+                                                |--&amp;gt;device_probe(drivers/core/device.c)
+                                                    |--&amp;gt;device_of_to_plat(drivers/core/device.c)
+                                                        |--&amp;gt;drv-&amp;gt;of_to_plat
+                                                            |--&amp;gt;fecmxc_of_to_plat(drivers/net/fec_mxc.c)/*解析设备树信息*/
+                                                    |--&amp;gt;device_get_uclass_id(drivers/core/device.c)
+                                                    |--&amp;gt;uclass_pre_probe_device(drivers/core/uclass.c)
+                                                    |--&amp;gt;drv-&amp;gt;probe(dev)
+                                                        /*drivers/net/fec_mxc.c*/
+                                                        U_BOOT_DRIVER(fecmxc_gem) = {
+                                                            .name    = "fecmxc",
+                                                            .id    = UCLASS_ETH,
+                                                            .of_match = fecmxc_ids,
+                                                            .of_to_plat = fecmxc_of_to_plat,
+                                                            .probe    = fecmxc_probe,
+                                                            .remove    = fecmxc_remove,
+                                                            .ops    = &amp;amp;fecmxc_ops,
+                                                            .priv_auto    = sizeof(struct fec_priv),
+                                                            .plat_auto    = sizeof(struct eth_pdata),
+                                                        };
+                                                        |--&amp;gt;fecmxc_probe(drivers/net/fec_mxc.c)/*探测和初始化*/
+                                                            |--&amp;gt;fec_get_miibus(drivers/net/fec_mxc.c)
+                                                                |--&amp;gt;mdio_alloc(drivers/net/fec_mxc.c)
+                                                                |--&amp;gt;bus-&amp;gt;read = fec_phy_read;
+                                                                |--&amp;gt;bus-&amp;gt;write = fec_phy_write;
+                                                                |--&amp;gt;mdio_register(common/miiphyutil.c)
+                                                                |--&amp;gt;fec_mii_setspeed(drivers/net/fec_mxc.c)
+                                                            |--&amp;gt;fec_phy_init(drivers/net/fec_mxc.c)
+                                                                |--&amp;gt;device_get_phy_addr(drivers/net/fec_mxc.c)
+                                                                |--&amp;gt;phy_connect(drivers/net/phy/phy.c)
+                                                                    |--&amp;gt;phy_find_by_mask(drivers/net/phy/phy.c)
+                                                                        |--&amp;gt;bus-&amp;gt;reset(bus)
+                                                                        |--&amp;gt;get_phy_device_by_mask(drivers/net/phy/phy.c)
+                                                                            |--&amp;gt;create_phy_by_mask(drivers/net/phy/phy.c)
+                                                                                |--&amp;gt;phy_device_create(drivers/net/phy/phy.c)
+                                                                                    |--&amp;gt;phy_probe(drivers/net/phy/phy.c)
+                                                                    |--&amp;gt;phy_connect_dev(drivers/net/phy/phy.c)
+                                                                        |--&amp;gt;phy_reset(drivers/net/phy/phy.c)
+                                                                |--&amp;gt;phy_config(drivers/net/phy/phy.c)
+                                                                    |--&amp;gt;board_phy_config(drivers/net/phy/phy.c)
+                                                                        |--&amp;gt;phydev-&amp;gt;drv-&amp;gt;config(phydev)
+                                                                            /*drivers/net/phy/smsc.c*/
+                                                                            static struct phy_driver lan8710_driver = {
+                                                                                .name = "SMSC LAN8710/LAN8720",
+                                                                                .uid = 0x0007c0f0,
+                                                                                .mask = 0xffff0,
+                                                                                .features = PHY_BASIC_FEATURES,
+                                                                                .config = &amp;amp;genphy_config_aneg,
+                                                                                .startup = &amp;amp;genphy_startup,
+                                                                                .shutdown = &amp;amp;genphy_shutdown,
+                                                                            };
+                                                                            |--&amp;gt;genphy_config_aneg(drivers/net/phy/phy.c)
+                                                                                |--&amp;gt;phy_reset(需要手动调用)(drivers/net/phy/phy.c)
+                                                                                |--&amp;gt;genphy_setup_forced(drivers/net/phy/phy.c)
+                                                                                |--&amp;gt;genphy_config_advert(drivers/net/phy/phy.c)
+                                                                                |--&amp;gt;genphy_restart_aneg(drivers/net/phy/phy.c)
+                                                    |--&amp;gt;uclass_post_probe_device(drivers/core/uclass.c)
+                                                        |--&amp;gt;uc_drv-&amp;gt;post_probe(drivers/core/uclass.c)
+                                                            /*net/eth-uclass.c*/
+                                                            UCLASS_DRIVER(ethernet) = {
+                                                                .name        = "ethernet",
+                                                                .id        = UCLASS_ETH,
+                                                                .post_bind    = eth_post_bind,
+                                                                .pre_unbind    = eth_pre_unbind,
+                                                                .post_probe    = eth_post_probe,
+                                                                .pre_remove    = eth_pre_remove,
+                                                                .priv_auto    = sizeof(struct eth_uclass_priv),
+                                                                .per_device_auto    = sizeof(struct eth_device_priv),
+                                                                .flags        = DM_UC_FLAG_SEQ_ALIAS,
+                                                            };
+                                                            |--&amp;gt;eth_post_probe(net/eth-uclass.c)
+                                                                |--&amp;gt;eth_write_hwaddr(drivers/core/uclass.c)
+                                    |--&amp;gt;...
+                                    |--&amp;gt;run_main_loop(common/board_r.c)/*主循环，处理命令*/
+                                        |--&amp;gt;main_loop(common/main.c)
+                                            |--&amp;gt;bootdelay_process(common/autoboot.c)    /*读取环境变量bootdelay和bootcmd的内容*/
+                                            |--&amp;gt;autoboot_command(common/autoboot.c)        /*倒计时按下执行，没有操作执行bootcmd的参数*/
+                                                |--&amp;gt;abortboot(common/autoboot.c)
+                                                    |--&amp;gt;printf("Hit any key to stop autoboot: %2d ", bootdelay);
+                                                    /*到这里就是我们看到uboot延时3s启动内核的地方*/
+                                            |--&amp;gt;cli_loop(common/cli.c)    /*倒计时按下space键,执行用户输入命令*/
+&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">yuanhy0055</dc:creator><pubDate>Sat, 07 Sep 2024 01:19:45 -0000</pubDate><guid>https://sourceforge.net1b23782e338c65c873c549318e9b51680001644e</guid></item><item><title>RPiCode modified by yuanhy0055</title><link>https://sourceforge.net/p/bppdroid/wiki/RPiCode/</link><description>&lt;div class="markdown_content"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;strings bootcode.bin | grep BOOT_UART
sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">yuanhy0055</dc:creator><pubDate>Fri, 06 Sep 2024 05:17:23 -0000</pubDate><guid>https://sourceforge.net72f0d442749634fa960b7b8d2d6df36cb5afec5b</guid></item></channel></rss>