Linux移植的一般过程

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刚开始的汇编部分会出错,这个要注意。

 

此外,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的时候内核会出错,而且不会有任何提示。

uboot移植-野火imx6ull 野火imx6ull pro开发板tftp服务的搭建IMX6ULL开发板参考的是NXP官方的I.MX6ULL EVK开发板做的硬件。Linux的移植要复杂的多,在移植Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动Linux 内核,bootloader有很多,常用的就是 U-Boot。 阅读详情

相关推荐

Linux系统移植——系统移植初步介绍

移植就是将bootloader的源代码,inux内核源代码,文件系统中用户态程序代码根据硬件做少量修改使其能够在目标硬件平台上运行起来的过程。

嵌入式技术开发 2070

linux系统移植

linux系统移植

嵌入式分享 4572

Linux系统移植的概述

与其它操作系统相比,Linux最大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用、修改、和扩展它。正是由于这一特色,Linux受到越来越多人士的青睐。于是,一个经常会被探讨的问题出现了,即关于Linux系统的移植。对于操作系统而言,这种移植通常是跨平台的、与硬件相关的,即硬件系统结构、甚至CPU不同。下面就让我们来看看在Linux系统移植方面,我们都需要做些什么。 一、Linux系统移

shanzhizi的专栏 3198

linux系统移植篇(一)—— linux系统组成

linux系列目录: linux基础篇(一)——GCC和Makefile编译过程 linux基础篇(二)——静态和动态链接 ARM裸机篇(一)——i.MX6ULL启动过程 ARM裸机篇(二)——i.MX6ULL第一个裸机程序 ARM裸机篇(三)——重定位和地址无关码 ARM裸机篇(四)——异常和中断 linux系统移植篇(一)—— linux启动过程 文章目录 ......

sinat_31039061的博客 8016

双向全桥隔离dc-dc变换器(DAB)

在全功率范围内,零电压开通优化调制方法能够实现双向全桥隔离dc-dc变换器所有开关的零电压开通,来提升变换器的效率,但其调制模式不连续。当变换器两端电压不匹配时,变换器的电流应力和回流功率将增加,软开关范围将变窄,变换器的效率显著降低。在轻载时,这两种电流优化调制方法采用相同的调制模式;在重载时,最小电流有效值调制方法具有两种调制模式,而最小电流应力调制方法只有一种。双向全桥隔离dc-dc变换器(DAB)和Buck/Boost不同,该变换器通过交流电感进行功率传输,其调制和控制不适合直接借鉴已有的研究。

m0_59329334的博客 3524

MatLab:数字图像处理实验

图像处理基本处理实验目的实验环境实验内容题目一代码结果题目二平移平移代码平移结果水平镜像水平镜像代码水平镜像结果垂直镜像垂直镜像代码垂直镜像结果放大放大代码放大结果缩小缩小代码缩小结果旋转旋转代码旋转结果双线性旋转旋转代码旋转结果 实验目的 1、熟悉并掌握MATLAB工具的使用;  2、实现图像的读取、显示、存储、平移、镜像、放大、缩小及旋转操作; 3、掌握常用的插值方法,并了解其优缺点。 实验环境 MatLab2016 实验内容 题目一 读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分别显

luoyao_的博客 9694

linux移植的一般过程,Linux移植过程中的问题

移植工作虽然成功了,但是有些错误还是要记录一下的,如下,持续更新。。。1.编译内核出现错误/bin/sh: 1: lzop: not foundmake[2]: *** [arch/arm/boot/compressed/piggy.lzo] 错误 1make[1]: *** [arch/arm/boot/compressed/vmlinux] 错误 2make: *** [uImage] 错误 ...

weixin_29107289的博客 298

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 156

linux移植的一般过程,最详细的linux-2.6.28移植过程.doc

最详细的linux-2.6.28移植过程最详细的linux-2.6.28移植过程linux-2.6.28移植过程移植基于飞凌2440开发板的linux-2.6.28移植过程如发现BUG欢迎发帖指正宿主机:REDHAT 9.0gcc-3.4.1目标机:s3c2440交叉编译器:arm-linux-gcc-3.4.1要移植的内核版本:linux-2.6.28.7文件系统: cramfs准备知识:Lin...

weixin_39538877的博客 159

用Python玩转Milvus:从安装SDK到完成第一个向量搜索Demo

本文为Python开发者提供了一份详细的Milvus向量数据库实战指南。文章重点讲解了如何规避版本兼容性陷阱,正确部署Milvus服务端并安装匹配的Python SDK。通过一个电影推荐系统的完整案例,演示了从数据建模、集合创建、向量插入、索引构建到执行混合搜索的全流程,帮助开发者快速上手并完成第一个向量搜索Demo。

weixin_29239279的博客 192

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1137

Linux U-boot移植及相关问题(IMX6ULL)

uboot 的移植并不是说我们完完全全的从零开始将 uboot 移植到我们现在所使用的开发板或者开发平台上。我们一般是在原厂提供的 BSP 包上做修改,将 uboot 或者 linux kernel 移植到我们的硬件上。在移植之前,我们先编译一下 NXP 官方 I.MX6ULL EVK 开发板对应的 uboot,首先是配置uboot,configs 目录下有很多跟 I.MX6UL/6ULL 有关的配置。至此,对于u-boot的移植中添加自己板子已全部结束,接下来进行编译。的图形界面配置下一章会详细的讲解。

qq_54853258的博客 1278

在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

一、    在我使用rosdep install teb_local_planner去安装teb_local_planner的时候,报错:Command ‘rosdep’ not found, but can be installed with:sudo apt install python3-rosdep2    我花大半个月好不容易建立起的一系列ROS环境,被python3-rosdep2这条万恶的语句连同ROS一起给我删了。。。悲伤来的那么猝不及防    随着ROS版本的迭代,相关资料很多都不再适用

慕羽★的博客 3805

嵌入式linux应用程序移植方法总结

前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟。江浩写的《CAPWAP移植进展.docx》对openCapwap的移植过程有了比较详细的描述,所以在此就不涉及技术细节了,本文档主要以openCapwap的移植为例,总结嵌入式linux应用程序移植的一般方法和步骤,为以后可能需要的移植工作提

小饼仙子的专栏 2197

ParaView: GUI 轴网格

ParaView: GUI 轴网格

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1922

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ARM Linux学习总结

ARM Linux特指运行于ARM架构处理器平台的Linux,区别于运行于PC上的X86 Linux。 ARM架构处理器多用在嵌入式系统中,通常被集成到片上系统(SoC)。由于片上系统整合外部设备控制器的多样性,对于任何一片特定的片上系统,需要对ARM Linux进行定制,以使集成在片上系统中的各项功能可用,这个过程称为ARM Linux移植。 ARM Linux移植的主要工作:1)Bootl

YC 864

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设备驱动调试和移植的一般方法

做linux底层软件工作也有两年了,算上研究生时期对底层软件的研究,加起来也快四年了。慢慢地发现有必要总结一些一般性的方法了。因为一般性的方法有宏观上的指导意义,以后调试和移植驱动时,经常性地回味这些一般性的方法可以防止自己犯同样的错误,进而少走弯路,以最高的效率完成工作。当谈到底层软件,我们一般都会想到bootloader、BSP、device driver、linux kernel等...

dielucui7698的博客 252

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux内核移植

一、资源来源 移植一般采用半导体厂商提供的 Linux BSP 包,再通过自己的开发板的硬件资源来进行修改,从而实现kernel能够在自己开发板运行。 二、移植主要过程 ①、在bsp包中查找可以参考的板子配置文件 ②、编译参考板子对应zimage核.dtb文件 ③、测试zimage与.dtb是否可行 ④、若启动成功,修改相应的驱动如网络驱动,lcd驱动等外部设备,对于SD卡、EMMC、NAND Flash等块设备驱动半导体厂商内核中已经提供。 ⑤、linux内核启动完成需要挂载根文件系统,所谓的init空闲

weixin_43892506的博客 845

嵌入式Linux系统移植完全指南:从Bootloader到内核配置(收藏这一篇就够了)

摘要 本文全面介绍嵌入式Linux系统移植流程,重点解析uboot和Linux内核的配置与移植。内容涵盖嵌入式系统启动层次(从硬件上电到用户应用)、uboot架构与源码结构(包括启动代码分析和编译系统)、环境变量设置与常用命令。详细讲解了uboot的汇编启动阶段和C语言初始化过程,以及Kconfig配置系统和Makefile结构。通过本指南,开发者可掌握如何为特定硬件平台定制Linux系统,包括内存操作、Flash操作、文件系统管理和网络配置等关键技能。

weixin_71604156的博客 1330
上一篇: C++中几个比较不常用的关键字
下一篇: MFC文件操作
walkingman321
博客等级 码龄20年 130粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值