1.下载linux-2.6.36.1.tar.bz2
      问题:tar -zxvf 解压压缩文件出现问题,无法识别.
      解决:1.通过file linux-2.6.36.1.tar.bz2 查看压缩格式
          2.通过命令 bzip2 -d linux-2.6.36.1.tar.bz2解压
          3.再通过tar xvf linux-2.6.36.1.tar解压,不能使用
            tar zxvf linux-2.6.22.6.tar解压
          4.上面也可以通过一条指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf -
            其中XX为内核压缩包文件名

2.下载patch-2.6.36.1.bz2补丁文件
      1.解压 bzip2 -d patch-2.6.36.1.bz2
      2.cd linux-2.6.36.1/
      3.patch -p1 < ../patch-2.6.36.1

3.先编译看下内核有没有问题,运行make命令出现下面的错误:
      问题:drivers/input/touchscreen/eeti_ts.c:65: 错误: 隐式声明函数‘irq_to_gpio’
      解决:重新make menuconfig,将driver中的输入设备->触摸设备中,将EETI选项不选,保存退出后,重新make.

4.将编译成功的内核zImage下载到板子中,出现如下问题:
      问题:NOW, Booting Linux......
          Uncompressing Linux... done, booting the kernel.
          然后没有反应....
      解决:1.Device Drivers--->Character devices--->Serial drivers
            下,选择:Samsung SoC serial support
                    Support for console on Samsung SoC serial port
                    Samsung S3C2440/S3C2442 Serial port support
          2.发现对应选项在Device Drivers->Character devices->Serial drivers中
            一看,原来根本就没有加载Samsung SoC serial support , 选成静态编译之后又出现了
            Support for console on Samsung SoC serial port ,就是它了,选上, 退出的时候顺便把
            Kernel low-level debugging functions给取消了否则我们设置的printk会自行输出,就不知道ttySAC有没有加载成功了
          3.最后发现原来时内核编译时需要传入一个启动命令:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,
            make menuconfig -> Boot options -> 第三行添加上面的启动命令,保存退出,启动成功~

5.启动过程中,出现问题:
      问题:Unable to handle kernel NULL pointer dereference at virtual address 00000000
          pgd = c0004000
          [00000000] *pgd=00000000
          Internal error: Oops: 80000005 [#1]
          last sysfs file:
          Modules linked in:
          CPU: 0    Not tainted  (2.6.36.1 #20)
          PC is at 0x0
          LR is at s3c_gpio_setpull+0x80/0x8c
      解决:参考网址:http://blog.csdn.net/ExclusivePig/archive/2010/10/24/5961869.aspx
          将static inline int s3c_gpio_do_setpull函数修改为以下内容:
          static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,
                      unsigned int off, s3c_gpio_pull_t pull)
          {
              if(NULL != chip->config->set_pull)
                  return (chip->config->set_pull)(chip, off, pull);
              else
                  return EINVAL;
          }

6.内核终于启动起来了,但是接着又出现了下面的问题:
       问题:List of all partitions:
           1f00             256 mtdblock0 (driver?)
           1f01              64 mtdblock1 (driver?)
           1f02            2048 mtdblock2 (driver?)
           1f03           63152 mtdblock3 (driver?)
           1f04           65536 mtdblock4 (driver?)
           No filesystem could mount root, tried:  cramfs
           Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
       解决:原来是没有添加YAFFS2文件系统,从网上下载,给内核打上补丁,重新make menuconfig,在file system中选择YAFFS2,重新make.
           打补丁如下:./patch-ker.sh c /work/system/linux-2.6.36.1

7.编译出现问题,最新内核去掉了一些函数,和改变了一些函数的名字,致使YAFFS2在编译过程中出现错误。
        解决:请参考:http://www.linuxhq.com/kernel/v2.6/36-rc1/fs/attr.c

8.再次下载编译好的内核,运行出现下面问题:
        问题:yaffs: dev is 32505858 name is "mtdblock2"
            yaffs: passed flags ""
            yaffs: Attempting MTD mount on 31.2, "mtdblock2"
            yaffs_read_super: isCheckpointed 0
            VFS: Mounted root (yaffs filesystem) readonly on device 31:2.
            devtmpfs: error mounting -2
            Freeing init memory: 120K
            Failed to execute /linuxrc.  Attempting defaults...
            Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
        解决:1.启动命令有问题,根据查看分区信息(supervivi:part show)得知root分区在mtdblock3上,不是在2上
              修改为:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
            2.问题依旧,重新make menuconfig,并对比友善之臂提供的mini2440源代码配置,重新选择,
              Device Driver ->Generic Driver Options ->(取消)devtmpfs: error mounting -2被解决了,
              但是依然无法启动继续查看。
            3.系统在启动过程中出现了很多yaffs: block 456 is marked bad,block 457 is bad这样的错误,越来越多,通过网上搜寻找到解决办法:
              我用的是板子自带的supervivi,使用命令bon part 0,就起到格式化整个Nand Flash芯片的作用,假坏块自然就化为乌有了。随后问题就柳暗花明。
            4.将mini2440自带的文件系统重新烧如板子,用mini2440自带的内核文件启动,正常,说明文件系统没有问题,将自己编译的内核下载进去,依然无法启动,
            5.添加一些内核输出信息,终于发现内核在:search_binary_handler()函数中的fn(bprm, regs)函数后,执行失败了。非常郁闷...
            6.文件系统没有问题,显然还是内核编译有问题,然后通过网上查找说是load_elf_binary执行有问题,可能是加载文件系统的文件时不识别文件格式,于是
              重新make menuconfig最后发现原来是要将General setup  --->Choose SLAB allocator --->选上SLAB,不要选择SLUB。重新make

转载于:https://www.cnblogs.com/hnrainll/archive/2011/06/09/2076138.html

ARM 内核移植中常见的错误相关推荐

  1. php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)

    在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...

  2. 错误 未找到引用源_你不理解的EXCEL函数中常见的错误值,都在这里

    今天我们来聊聊EXCEL函数中常见的错误值 使用EXCEL一定会用到函数公式,,使用函数公式计算分析数据,不免会遇到出错的情况, 但是出错后不知道错误原因,为什么会返回错误值,所以你的函数还不能自己优 ...

  3. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

  4. 计算机错误符号,解析Excel中常见的错误符号以及解决方法

    解析Excel中常见的错误符号以及解决方法分享给大家, Excel 电子表格是很多人都要使用的软件,也相信很多人都会用,但是用得好不好就差别很大了,用得好的话可以让工作效率大大提高,但关于Excel的 ...

  5. ASP 中常见的错误 80004005 信息

    ASP 中常见的错误 80004005 信息 错误信息 Microsoft JET Database Engine 错误 '80004005' 未指定的错误 (Provider 错误) 原因: 权限问 ...

  6. 数据可视化过程中常见的错误类型

    数据可视化是一个沟通复杂信息的强大武器.通过可视化信息,我们的大脑能够更好地抓取和保存有效信息,增加信息的印象.但如果数据可视化做的较弱,反而会带来负面效果.错误的表达会损害数据的传播,完全曲解他们. ...

  7. 大数据分析中常见的错误

    大数据产生的背景是整个社会走向数字化,特别是社交网络和各种传感设备的发展.云计算和搜索引擎的发展,使得对大数据的高效分析成为可能,核心问题是如何在种类繁多.数量庞大的数据中快速获取有价值信息.通过数据 ...

  8. mysql未指定错误_使用mysql的系统中常见sql错误

    使用mysql的系统中常见的sql错误: 1.事务中某些表是非innodb类型. SQLWarning ignored: SQL state 'HY000', error code '1592', m ...

  9. php中常见的错误类型有,JavaScript编程中会出现的错误类型有哪些?错误类型介绍...

    JavaScript编程中会出现的错误类型有哪些?本篇文章就给大家介绍在JavaScript编程中出现的几种常见的错误类型.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.[相关视频教 ...

最新文章

  1. java读取C++结构体,类型转换
  2. 拟阵论 贪心策略的数学基础
  3. php ajax mysql视频教学视频_PHP入门教程之AJAX 与 MySQL
  4. 提高电火炉使用安全,微波雷达模组感应控制,雷达感应技术方案
  5. 随机生成姓名存入mysql_MYSQL随机生成姓名
  6. 非科班基础知识三座大山:网络,操作系统,数据库
  7. BIOS/UEFI基础——Protocol介绍
  8. Python 05 包Packet
  9. HTML语句判断IE浏览器版本
  10. 健康生活 多用肥皂少用洗涤剂
  11. Windows系统与debian系统双系统安装
  12. android 酷炫启动页,RxJava实践之打造酷炫启动页
  13. 发顶会论文,怎么就那么难?
  14. [渝粤教育] 西南科技大学 投资项目评估 在线考试复习资料
  15. 用Latex输入微米(micron)或者微秒的方法
  16. arm-linux东东之nand之2:3c2440_nand_probe
  17. mysql http隧道_Navicat™ 数据库 HTTP 隧道通信协议
  18. 联想服务器维护 - System X 3650 M5
  19. 附加数据库 对于服务器 XXX失败
  20. 华为eNSP静态基础实验

热门文章

  1. Android菜鸟的成长笔记(11)——Android中的事件处理
  2. struts2框架从数据库批量取得数据集并在前台页面循环显示
  3. C#操作SQL Server通用类
  4. 统计所有子串写到文件
  5. golang重复声明变量
  6. muduo之EventLoop
  7. 简述进程的启动、终止的方式以及如何进行进程的查看。
  8. 设计模式:控制反转(Inversion Of Control)
  9. python二十:内置函数
  10. 扩展系统功能--装饰模式