Linux内核移植问题总结

移植一个内核会涉及到很多东西,对想学arm的人来说还是挺有帮助的,会比直接拿别人移植好的内核来跑有趣的多。

  一、串口打印问题

  内核移植的第一步就是要有打印输出。看不到打印信息,都不知道内核有没有跑起来。我移植 linux-2.6.35编译完成后运行,启动一直停在starting kernel . . .,检查machine-type、cpu-id、时钟、入口地址等可能会导致问题的地方都没有问题,最后想到可能是串口使用的引脚和内核不一致,最后才发现板子使用的是串口2作为打印输出(也是我一开始没想到的,因为一般都会默认使用串口1,纠结)。讲启动参数改成串口2,mx5_loco.c 里面的init串口改成UART2_BASE_ADDR,可以输出信息了。

  二、文件系统

  1、自己编译一个busybox来制作一个文件系统其实还是挺麻烦的,只能制作一个很简单的文件系统,因为是在flash上加载,所以我最开始尝试的是cramfs,加载文件系统阶段一直出错

  List of all partitions:

  1f00          131072 mtdblock0  (driver?)

  No filesystem could mount root, tried:  cramfs

  Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,0)

  这里只读到了一个块设备,block0,显然flash的分区没有成功,修改nandflash的分区,文件系统正常加载,启动参数如下

  setenv bootargs root=/dev/mtdblock3 rootfstype=cramfs rw console=ttymxc1,115200 init=/linuxrc

  2、加载成功有时会出现Kernel panic - not syncing: Attempted to kill init!,这个很多人说要开

  Kernel Features  --->

  [*] Use the ARM EABI to compile the kernel

  [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL)(NEW)

  我试过好像没什么效果,出现这个问题有可能是文件系统的inittab和rcS两个文件有问题。

  3、jffs2文件系统

  JFFS2 error: (1) jffs2_build_inode_pass1: child dir"alsa" (ino #1159) of dir ino #1074 appears to be a hard link  JFFS2 error: (1) jffs2_build_inode_pass1:child dir "l" (ino #1170) of dir ino #1075 appears to be a hard link

  原由 : flash没有erase彻底.,多 nand erase几次就好了

  还有就是jffs2文件系统会有很多警告信息,我在源码里面将打印都去掉还是不行

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-31 21:58:34

Linux内核移植问题总结的相关文章

linux内核移植X86平台的例子

bootloader支持启动多个Linux 内核安装(X86平台) 1. cparch/x86/boot/bzImage /boot/vmlinuz-$version 2. cp $initrd /boot/ 3. 修改/etc/grub.conf或者/etc/lilo.conf $version为所编译的内核版本号   文件linux-2.6.32.2.tar.bz2在目录/home/x86下. #tar jxvflinux-2.6.32.2.tar.bz2 #cd linux-2.6.32

为AM335x移植Linux内核主线代码

/********************************************************************** * 为AM335x移植Linux内核主线代码 * 说明: * MariannaZhu对AM335x做Linux内核移植时写的blog,记录一下,也许以后 * 用得到. * * 2016-12-5 深圳 南山平山村 曾剑锋 *******************************************************************

详解Linux内核中的container_of函数_unix linux

前言 在linux 内核中,container_of 函数使用非常广,例如 linux内核链表 list_head.工作队列work_struct中. 在linux内核中大名鼎鼎的宏container_of() ,其实它的语法很简单,只是一些指针的灵活应用,它分两步:       第一步,首先定义一个临时的数据类型(通过typeof( ((type *)0)->member )获得)与ptr相同的指针变量__mptr,然后用它来保存ptr的值.       第二步,用(char *)__mptr

手把手教你移植linux内核(目标平台S3C2410)

Linux内核的最初版本由Linus Torvalds在1991年发布,后来内核版本不断更新: Linux1.0   1994年3月    仅支持386 Linux1.2   1995年3月    多平台支持 Linux2.0   1996年6月    支持SMP Linux2.2   1999年1月    支持更多的硬件 Linux2.4   2001年1月    支持桌面系统和USB Linux2.6   2003年12月   支持更多平台,使用新的调度器,内核可被抢占,模块子系统和文件系统

嵌入式-自己移植了uboot现在想通过usb来烧写Linux内核,该怎么办?表示网络下载不了

问题描述 自己移植了uboot现在想通过usb来烧写Linux内核,该怎么办?表示网络下载不了 自己移植了uboot现在想通过usb来烧写Linux内核,该怎么办?表示网络下载不了 解决方案 不同的硬件用的软件不太一样,你的开发包应该有工具.再不行google下.什么叫网络下载不了. 参考下http://blog.sina.com.cn/s/blog_726c4bd20100unjn.htmlhttp://bbs.ednchina.com/BLOG_ARTICLE_3019734.HTM 解决方

linux内核-内核移植,出现了错误,求大神帮忙

问题描述 内核移植,出现了错误,求大神帮忙 出现了错误,提示开启ip6,如何开启,我的是bf609开发板,配置后 然后make出现了错误 解决方案 内核移植出现的错误&&解决方法 解决方案二: 一般类似于内核编译错误,在开发板资料说明书中都有类似注意事项说明的,若没有绝大部分错误直接度娘.此外,这种编译错误的问题起码要把错误信息和或者编译截图发上来啊..

Linux内核及内核缓冲区技术详解

Linux 内核简介 现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构.您可以从两个层次上来考虑操作系统,如图 2 所示. 图 2. GNU/Linux 操作系统的基本体系结构 最上面是用户(或应用程序)空间.这是用户应用程序执行的地方.用户空间之下是内核空间,Linux 内核正是位于这里. GNU C Library (glibc)也在这里.它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制.这点非常重要,因为内核和用户空间的应用程

C语言之linux内核可变参实现printf,sprintf

      昨天,我发表了一篇用可变参实现的fprintf函数,其实说实话还不完全是可变参实现的,因为用到了FILE * 这样的指针,需要包含stdio.h这个头文件才能实现这个函数,今天我们就来看看,如何抛弃stdio.h,全0开始实现printf , sprintf ,当然,这段代码是我在linux内核里面获取的,再经过我本人修改,移植,在DevC++这个编译环境中通过测试.我们来看看代码:       #include <stdarg.h> #define NULL 0 //如果字符串中

Linux内核剖析 之 历史和体系结构分析

Linux 内核剖析 之 历史和体系结构分析       Linux 内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织.在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和核心接口.您还可以通过其他 IBM 文章的链接更深入地进行学习.       由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先回顾一下 Linux 的简短历史,然后从较高的层次审视 Linux 内核的体系结构,最后介绍它的主要子