itop4412修改uboot使之能保存环境变量

修改uboot使之能保存环境变量
思路与步骤:


1.想要保存环境变量,就要使用saveenv命令


2.由uboot的命令体系可推测saveenv命令对应的函数是do_saveenv,可以在sourceinsight工程直接搜索此函数

3.找到函数int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]),发现真正做事的函数是saveenv()函数

4.继续找saveenv()函数,发现有很多个,真正的在env_auto.c中

5.分析uboot,可知INF_REG3_REG的值,如果没记错INF_REG3_REG = 7的,所以走的是else这条路

6.你会发现这里什么都没有做,只有 printf("Unknown boot device\n");

7.那我们就添加保存的函数,函数哪里来,就在前面,saveenv_movinand(),这个就是我们需要的函数

8.你以为这就完了,不存在的,进去看看它做了什么

9. mmc_init(find_mmc_device(0));初始化MMC,可以注释掉
       movi_write_env(virt_to_phys((ulong)env_ptr));把要保存的环境变量写进去,没毛病,这是我们想要的,可是这函数里面有个致命的错误

10.movi_write(raw_area_control.image[2].start_blk, 
raw_area_control.image[2].used_blk, addr);我们源码中把要保存的环境变量保存到raw_area_control.image[2]中,但实际上uboot的分区是
raw_area_control.image[3]保存的才是环境变量

11.在哪看分区信息?init_raw_area_table()函数中,可以直接由raw_area_control的定义间接找到

12.把raw_area_control.image[2]改成raw_area_control.image[3],下面的movi_read_env函数中把的也要改成raw_area_control.image[3]

13.由于过了很久,具体的修改细节忘了。以为到上面一步就可以了,其实不是,还有东西要改。

14.要修改的是iTop4412_uboot\lib_arm下的start_armboot函数里面的env_relocate函数里面的env_relocate_spec。env_relocate_spec这个函数也是在
  env_auto.c中,把else if (INF_REG3_REG == 3)改成else if (INF_REG3_REG == 3 || INF_REG3_REG == 7)
  
15.进到改成env_relocate_spec_movinand函数中,把#if !defined(CONFIG_S5P_MSHC)和mmc_init(find_mmc_device(0));注释掉,别忘了它对应的#endif,到这里真的大功告成了。

        16.关于内核的修改,看另一篇文章《itop4412内核的启动过程分析》的 5.setup_machine_tags对cmdline的基本处理

2018年5月23
DGY(编)
2018年5月27
DGY(改)
2023年7月2
DGY(改)


 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
itop4412上移植SSH,你可以按照以下步骤进行操作: 1. 首先,将SSH源代码拷贝到itop4412的开发环境中。你可以使用SCP命令将源代码从本地计算机复制到itop4412上的指定目录。例如,将源代码复制到itop4412的`/home/project/ssh-arm/openssh-4.6p1`目录下: ```shell scp /path/to/openssh-4.6p1.tar.gz root@itop4412:/home/project/ssh-arm/ ``` 2. 解压源代码文件。在itop4412上的开发环境中,使用以下命令解压源代码文件: ```shell tar -zxvf openssh-4.6p1.tar.gz ``` 3. 进入解压后的源代码目录: ```shell cd openssh-4.6p1 ``` 4. 配置编译选项。运行以下命令以配置SSH的编译选项: ```shell ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/ssh ``` 这里的`--host`选项指定了目标平台为arm-linux-gnueabihf,`--prefix`选项指定了安装目录为`/usr/local/ssh`。 5. 编译源代码。运行以下命令以编译SSH源代码: ```shell make ``` 6. 安装SSH。运行以下命令以将编译后的SSH安装到指定目录: ```shell make install ``` 这将把SSH安装到`/usr/local/ssh`目录下。 7. 配置SSH服务器。在itop4412上的开发环境中,编辑SSH服务器的配置文件`/usr/local/ssh/etc/sshd_config`,根据你的需求进行配置。 8. 启动SSH服务器。运行以下命令以启动SSH服务器: ```shell /usr/local/ssh/sbin/sshd ``` 现在,你已经成功在itop4412上移植了SSH,并启动了SSH服务器。你可以使用SSH客户端连接到itop4412并进行远程操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值