Linux移植的一般过程
前一阵子在公司移植Linux2.6到一块ARM11的开发板上,下面粗略讲讲移植Linux的一般过程。
一开始的UBOOT的移植不多说了。UBOOT最后有两种方式进入Linux,一种是使用uImage,可以在引导时附加命令行参数,但操作起来比较麻烦。另一种较简单的是使用tftp将Linux内核加载到0x80008000(默认起始地址)的地方,然后使用go命令直接跳转。我使用的是第二种方式,其缺点是调整命令行参数的时候需要修改.config文件,然后强制重新编译setup.c(可以通过删除setup.o强制重新编译)。另外,arm下引导linux时R0和R1寄存器的值是必须设置的,分别为你的CPU(好像是,不记得了)和BOARD类型,否则在Linux刚开始的汇编部分会出错,这个要注意。http://hovertree.com/menu/linux/
此外,linux也有两种方式的引导,一种是zImage,另一种是Image。个人意见,一开始移植的时候用Image会更加简便,虽然tftp下载的时候稍微多耗一点时间,但由于减少了中间的解压缩步骤,能减少出错的机会,加快开发进度。
跳转到Linux之后,由于一开始是一段汇编代码,所以需要用jtag调试,比如在0x80008000处设置硬件断点。汇编代码处主要要做的工作是在内存映射表里添加上串口IO地址的映射,这样就能够操作串口输出调试信息。然后使用C语言在start_kernel的文件里写一个自己的printk函数,叫做temp_print,具体的代码可以参考printk的实现。这一阶段比较痛苦,因为使用jtag调试汇编很麻烦。一旦temp_print成功输出,并且Linux进入到start_kernel开始的C代码中,就可以把JTAG抛弃,全部使用串口输出调试。
接下来是系统自带的printk的输出,因为linux内核自身的调试信息都是通过printk输出的。这里主要是要设置linux的命令行启动参数,包括console和earlyconsole两个,将它们设置成你需要输出的串口号,并检查一下串口驱动的代码,比如8250.c和8250_early.c两个文件。
printk成功输出之后,下一步调系统时钟中断。这需要熟悉Linux中关于时钟中断的处理代码,网上的相关资料也需要看一看。看懂之后应该不是很难。
然后可以调试flash驱动和网卡,两者只要支持一个即可运行根文件系统。一般使用网卡比较简单一点,也更灵活。网卡启动之后在命令行参数中设置nfs方式的根文件系统,并把文件系统放在一台linux的服务器上面通过NFS导出。这样,就基本上移植成功了一个最简单的linux系统。
linux跑起来之后,再根据需要添加flash、lcd等驱动,一个完整的系统就能一步步搭建起来了。
下面讲讲我调试的时候遇到的问题:
调试OneNand驱动的时候,需要注意OneNand与Linux之间是通过16位数据线还是32位数据线连接。如果是16位数据线连接,那么驱动代码中的memcpy函数就会出错,因为memcpy默认是按照32方式复制数据的。可以自己重写一个内存拷贝函数,里面使用unsigned short方式拷贝数据。
调试网卡驱动的时候,要注意实际使用网卡的中断极性。虽然Linux自带有大部分网卡的驱动,但中断极性有可能是反的,需要注意。另外网卡中断线一般是连在CPU的GPIO上面(比如我使用的SMC91C111),这里需要根据自己板子的实际连线调整代码中中断线的GPIO占用号。并注意防止GPIO线的占用冲突。
linux2.6中多了一个eabi编译,比如Android上面就经常使用。如果内核使用eabi方式编译,那么就必须保证你的根文件系统也是通过eabi方式编译的,否则在进入/bin/sh的时候内核会出错,而且不会有任何提示。
推挤:http://www.cnblogs.com/roucheng/p/3470287.html
Linux移植的一般过程的更多相关文章
- Linux移植之内核启动过程start_kernel函数简析
在Linux移植之内核启动过程引导阶段分析中从arch/arm/kernel/head.S开始分析,最后分析到课start_kernel这个C函数,下面就简单分析下这个函数,因为涉及到Linux的内容 ...
- Linux移植之内核启动过程引导阶段分析
在Linux移植之make uImage编译过程分析中已经提到了uImage是一个压缩的包并且内含压缩程序,可以进行自解压.自解压完成之后内核代码从物理地址为0x30008000处开始运行.下面分析在 ...
- linux移植问题汇总(一)
linux移植问题汇总(一) 在此记录移植linux过程中出现的问题以及解决方法. 项目GitHub地址 linux3.0.80:https://github.com/numbqq/linux-3.0 ...
- Linux移植之tag参数列表解析过程分析
在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析. 1.内存参数ATAG_MEM参数解析 2. ...
- Linux移植之子目录下的built-in.o生成过程分析
在Linux移植之make uImage编译过程分析中罗列出了最后链接生成vmlinux的过程.可以看到在每个子目录下都有一个built-in.o文件.对于此产生了疑问built-in.o文件是根据什 ...
- Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析
在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件.这里主要介绍几个比较关键的文件 1.linux-2. ...
- Linux移植之make uImage编译过程分析
编译出uboot可以运行的linux内核代码的命令是make uImage,下面详细介绍下生成linux-2.6.22.6/arch/arm/boot/uImage的过程: 1.vmlinux.Ima ...
- Linux移植之配置过程分析
在Linux移植之移植步骤中已经将Linux移植的过程罗列出来了,现在分析一下Linux的配置过程,将分析以下两个配置过程: 1.make s3c2410_defconfig分析 2.make men ...
- Linux移植随笔:终于解决Tslib的问题了【转】
转自:http://www.latelee.org/embedded-linux/porting-linux-tslib.html 前段时间让Tslib搞晕头了,原来一切都是版本惹的祸.本文只是一个随 ...
随机推荐
- 这里有个坑---[NotMapped]不要忘了加
这里有个坑,我们定义实体的时候如果使用了在数据库没有的字段记得加[NotMapped]---------每一个遇到的坑总结后都是一比财富. 在项目中我们一般会使用EF等ORM框架来为我们服务,在ORM ...
- Laravel5.0学习--02 实例进阶
本文以laravel5.0.22为例. 本节以新建一个简单的博客作为实例. 准备工作 数据库配置 .env文件(也可以直接修改config/database.php) DB_HOST=localhos ...
- 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
- 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通
在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...
- LigerUI学习使用
LigerUI有如下主要特点: 使用简单,轻量级 控件实用性强,功能覆盖面大,可以解决大部分企业信息应用的设计场景 快速开发,使用LigerUI可以比传统开发减少极大的代码量 易扩展,包括默认参数.表 ...
- JS面向对象逆向学习法,让难理解的统统一边去(1)~
对于面向对象我只能说呵呵了,为什么呢,因为没对象--- 既然你看到了这里,说明你有一定的基础,虽然本系列文章并不会过多的讲述基础部分,请做好心理准备. 本篇比较简单,这篇文章的意义是让你明白学习面向对 ...
- java集合框架之List
一.List: 1. 特有的常见方法:(有个共性特点就是都可以操作角标) (1).添加 void add(int Index , E element):在list的指定位置插入元素 void add ...
- JavaScript的学习--JavaScript设计模式的总结
这篇博客只是自己对设计模式的理解的备忘~ 看完了<JavaScript设计模式>这本书,一直没有写博客记录一下,最近抽出时间来重读了一下,就顺便记录一下~ 如果你只是想粗略了解一下Java ...
- ASP.NET MVC路由解析
继续往下看<ASP.NET MVC5框架揭秘>. ASP.NET系统通过注册路由和现有的物理文件路径发生映射.而对于ASP.NET MVC来说,请求的是某个Controller中的具体的A ...
- Csstyle - 创建简洁、可维护强的 CSS 样式
Csstyle 是一种现代的方式,用于制作精美的可维护样式表.这个 Csstyle 方法使用 SASS 混入,使你的 CSS 更具可读性和语义,并为你生成选择器,自动处理嵌套等事情. Csstyle ...