u-boot移植(十三)---代码修改---裁剪及环境变量 二

时间:2021-12-31 02:24:18

一、错误处理

  上一节遇到一个错误:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  print一下:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  发现我们在jz2440.h中静态写的网络参数都没有写进去。

  dm9000 address not set。 dm9000的地址未设置。

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  这里对应两个函数:

  static int eth_pre_unbind(struct udevice *dev) 和 int eth_write_hwaddr(struct eth_device *dev, const char *base_name, int eth_number)

  这里两个函数对应着宏 CONFIG_DM_ETH。在文件中查找一下,这个宏定义的是什么:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  config中没有设置,则运行的应该是后面一个函数。后面一个函数是设置硬件地址。

  打印地址处的代码如下:

 #ifdef CONFIG_NET_RANDOM_ETHADDR
net_random_ethaddr(dev->enetaddr);
printf("\nWarning: %s (eth%d) using random MAC address - %pM\n",
dev->name, eth_number, dev->enetaddr);
#else
printf("\nError: %s address not set1.\n",
dev->name);
return -EINVAL;
#endif

  env_enetaddr 是从eth_getenv_enetaddr_by_index此函数中获取到的。

 eth_getenv_enetaddr_by_index(base_name, eth_number, env_enetaddr);

 int eth_getenv_enetaddr_by_index(const char *base_name, int index,
uchar *enetaddr)
{
char enetvar[];
sprintf(enetvar, index ? "%s%daddr" : "%saddr", base_name, index);
return eth_getenv_enetaddr(enetvar, enetaddr);
}

  从几个函数中我们可以知道,如果我们的dev->enetaddr是0,则就会打印那条错误信息。

  试了好几个方法,都未成功设置,先放置在这里,进行其他的工作。

二、nand分

  u-boot中输入mtdparts命令:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  jz2440.h中定义宏:

  定义宏 CONFIG_CMD_MTDPARTS 打开 mtdparts命令

  修改run_main_loop函数:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  mtdparts_init() 函数的作用就是构造分区,这些分区都是用数组表示的。

  查看其他地方的设置分区,仿照写入,如下:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  编译运行,结果如下:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  这里有个提醒:mtdparts variable not set, see 'help mtdparts'         no partitions defined

  这是因为没有带参数,下面已经打印出分区了。

  执行两条命令建立分区,如下:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  擦除分区:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  加入代码,自动执行分区的两条命令:

 static int run_main_loop(void)
{
#ifdef CONFIG_SANDBOX
sandbox_main_loop_init();
#endif
// mtdparts_init(); /* 分区命令初始化 */
run_command("mtdparts default",); /* 自动执行分区命令 */
/* main_loop() can return to retry autoboot, if so just run it again */
for (;;)
main_loop();
return ;
}

  编译运行就可以看到效果了。

三、加入kernel启动命令行

  就两条命令:

  u-boot移植(十三)---代码修改---裁剪及环境变量 二

  执行bootm就可以启动内核了

  

u-boot移植(十三)---代码修改---裁剪及环境变量 二的更多相关文章

  1. u-boot移植(十三)---代码修改---裁剪及环境变量 一

    一.内核裁剪 内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉. /* * (C) Copyright 20 ...

  2. linux修改当前用户环境变量永久生效

    在linux环境中,修改当前用户环境变量,且永久生效的方法如下. 1,编辑~/.bash_profile文件 1 2 3 # Get the aliases and functions 4 if [ ...

  3. 如何快速有效的修改java的环境变量

    之前已经修改过jdk的环境变量,,,,在/etc/profile下,,, export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera export PATH=${J ...

  4. 在c代码中获取用户环境变量

    1 extern char ** environ 这是一个字符串数组,最后一个元素是null,即\0. 2 在代码中的使用方法 直接extern char **environ,然后 直接environ ...

  5. Linux目录终章,单用户模式修改密码、环境变量、第三方软件安装

    目录 今日内容概要 内容详细 解析映射文件 磁盘挂载文件 开机加载脚本 系统启动级别 使用单用户模式修改密码 变量加载文件 登录提示信息 第三方软件安装目录(编译安装目录) 系统日志目录 保存系统运行 ...

  6. 代码修改shader Properties uniform变量

    2.4 Shader的数据接口:属性和 uniform变量     如果我们想设定一个特定的值到Shader,即为了在实例化Shader为Material时,可以通过为属性赋值达到创建具体对象的目的, ...

  7. java 代码中设置 临时 环境变量

    System.setProperty("hadoop.home.dir", "D:\\software\\software_install\\dev_install\\h ...

  8. 详解Windows不重启使环境变量修改生效(经典)

    在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效.有没有什么方法可让它即时生效呢?下面介绍一种方法: 以修改环境变量“PATH”为 ...

  9. Ubuntu 12 修改环境变量

    Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ...

随机推荐

  1. js判断浏览器

    function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 ; if (isOpera) { ret ...

  2. GraphicsMagick+im4java 图片处理

    最近团队内部分享GraphicsMagick+im4java 图片处理 就把如何安装,运行都统一整理一下. 详细如下: 在windows上安装ImageMagick: download 地址:http ...

  3. Winsock系列函数 及 Socket通信流程

    Socket是一种网络通信机制   Winsock系列函数   1. Socket 创建socket   2. Connect 尝试连接远端Socket   3. Send 在某个Socket 向远端 ...

  4. poj3159 最短路(差分约束)

    题意:现在需要分糖果,有n个人,现在有些人觉得某个人的糖果数不能比自己多多少个,然后问n最多能在让所有人都满意的情况下比1多多少个. 这道题其实就是差分约束题目,根据题中给出的 a 认为 b 不能比 ...

  5. HDOJ 1028 Ignatius and the Princess III (母函数)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  6. hdu 1180 诡异的楼梯(广搜,简单)

    题目 挺简单的一道广搜题,只要用判断时间是偶数还是奇数就可以判断楼梯的方位,但是我这傻逼居然写了那么久啊那么久,我果然秀逗了,,,, #define _CRT_SECURE_NO_WARNINGS # ...

  7. OpenCV249 for python278 最简配置方案

    跟很多开源软件一样OpenCV也提供了完善的Python接口,非常便于调用.OpenCV 包含了超过 2500 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用OpenCV的函数来实现,超级方 ...

  8. 正则表达式,grep,sed,

    答案详见:http://www.cnblogs.com/linhaifeng/p/6596660.html 作业一:整理正则表达式博客 ^ # 行首定位 $ # 行尾定位 . # 匹配除换行符以外的任 ...

  9. java的几个奇怪语法

    =============================Java 双冒号 :: 语法的含义=============================下面的代码中有双冒号,初看上去很奇怪, list. ...

  10. 关于python中的类方法(classmethod)和静态方法(staticmethod)

    首先明确两点: a)python在创建类的时候,self指向的是类的实例而不是类属性! b)我们所创建的类的方法有两种作用,一种是改变类的属性,一种是改变实例的属性,这点一定要分清! c)我们在调用类 ...