Linux内核移植_rom内核移植

Linux内核移植_rom内核移植这两天在友善的tiny210的实验板上移植了linux内核,正好和大家分享,同时也算是做个记录吧!首先介绍一下开发环境吧,这个在做移植的时候还是挺重要的。主机linux:Fedora9 安装在VMware虚拟机上;开发板 :友善的tiny210,256M的FLASH;移植linux:LINUX-3.3.5;交叉编译环境:arm-linux-gcc-4.4.3这个是友善24

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

 这两天在友善的tiny210的实验板上移植了linux内核,正好和大家分享,同时也算是做个记录吧!首先介绍一下开发环境吧,这个在做移植的时候还是挺重要的。

主机linux:Fedora9   安装在VMware虚拟机上;

开发板   :友善的tiny210,256M的FLASH;

移植linux:LINUX-3.3.5;

交叉编译环境:arm-linux-gcc-4.4.3 这个是友善2440里带的;

u-boot  :是网上找的,待会我给出源文件。

1.烧写启动文件

    要移植操作系统,肯定是需要启动代码了,也就是u-boot了。我自己没有移植u-boot,是从网上现找的。好吧,我上传一下,也方便大家下载。连接地址:http://download.csdn.net/detail/xie0812/6189627 是在windows下压缩的,里面包含两文件,分别为u-boot的源文件和直接用于下载用的.bin文件。u-boot有了,现在说说怎么把.bin文件烧写到sd上吧。首先把.bin文件拷贝到linux系统中,随便在一个文件夹下就行。下来就是往sd里烧写了,当然了sd是必须的嘛。这里给个插曲,把sd插到电脑后,windows下发现了,但虚拟里的linux系统发现不了,后来是通过这么解决的,点击VMware的VM—–>Rmovables Devices——->USB Device——>Rmovable disk,当然这是在发现不了sd的情况下才这样滴,而且可能跟虚拟机和主机上的linux系统有关,环境不一样可能会不同。当发现了sd后,就进入你放tiny210v2–uboot.bin的文件夹。这时你通过cat /proc/partitions 命令查看你的sd卡对应的设备文件的名字,这里我的是sdb,可能会有不同。好吧,现在文件准备好了,sd也发现了,就差烧写了。通过sudo dd iflag=dsync oflag=dsync if=tiny210v2-uboot.bin of=/dev/sdb seek=1 ,这个命令把.bin烧写到sd中,这里注意命令中的/dev/sdb一定是你sd卡在linux系统中的名字。

2.下载linux源代码

 咱们去linux官网上下载吧,这个是连接:https://www.kernel.org/   在这里下载linux-3.3.5。

3.修改Makefile文件

 下载到源代码后,首先是解压,解压的命令是 tar xvzf linux-3.3.5.tar.gz 这样就完成了解压。现在修改一些设置,为编译做准备。首先,修改linux下的Makfile文件,进入解压后的linux-3.3.5,通过vi Makefile 命令打开修改文件。在文件的195行和196行处修改,没修改以前的代码为:

ARCH		?= $(SUBARCH)
CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)

修改后的代码为:

ARCH		?= arm
CROSS_COMPILE	?= /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-

第一行的修改大家肯定是明白的嘛,因为咱们需要移植到arm上,所以是arm嘛。第二行的是你的交叉编译器所处的位置,可能每个人的目录会不同,看具体的情况来吧。这里简单的插入一句题外话,通过vi Makefile时,通过命令set nu可以使Makefile文件显示行数。

4.编译内核

   把smdk210v板子的config文件拷过来了,进行内核编译。简单的说一下,咱们在这里的移植是属于板级的移植,一般来说移植操作系统分为:体系结构级的移植、soc级的移植和板级的移植。板级的移植是最简单的,往往是在芯片制作厂商提供的样板的基础上做移植。当然一般来说,这就够了。好吧,不扯了。在linux-3.3.5目录下,通过cp arch/arm/configs/s5pv210_defconfig .config 把对smdkv210板的配置文件拷贝到linux-3.3.5目录下,并且保存为.config文件。现在把配置文件拷贝过了,通过命令:make menuconfig 进入配置界面进行配置吧。进入后的界面为:Linux内核移植_rom内核移植

这就是刚进入的界面,这时选择General setup 进入另外一个界面:Linux内核移植_rom内核移植

在图中选择可以看到的Cross-compiler tool prefix(new),然后输入交叉编译器的路径,输入后的结果为:Linux内核移植_rom内核移植

注意输入最后的是arm-linux-gcc,接下来退到刚开始的界面下,选择System Types——->这个选项Linux内核移植_rom内核移植

看到图中高亮的部分了,选中这个选项,把1改成0,为什么要改了,因为开发板上是用UART0输出信息的,如果不修改,会在启动内核的时候,无法显示信息。也就是在 Start kenel….之后不显示信息的缘故。修改后的效果图为:

Linux内核移植_rom内核移植

接下来的工作是继续退到刚进入的界面,选择Boot options——–>选项,进入后的效果图为:Linux内核移植_rom内核移植

同样看到图中高亮的部分了吧,用Enter键选择它,把里面的console=ttySAC1改为console=ttySAC0,其他的不变,由于也看不到效果,就不贴图了,这样就完成了内核的基本配置,很简单吧,当然这只是一个内核的雏形,其他的都没配置,所以简单了。现在开始编译吧,你也等不急了吧。运行 make uImage 命令,开始内核的编译。可惜,出现了下面的错误,没事,慢慢解决嘛

  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
"mkimage" command not found - U-Boot images will not be built
make[1]: *** [arch/arm/boot/uImage] Error 1
make: *** [uImage] Error 2

看上面的提示是说找不到mkimage,原因就不说了,这个问题是这样解决的。拷贝一个mkimage文件到相应的交叉编译器的相应的目录下,mkimage是bootloader里tools目录下的一个文件,我这里提供的这个文件也是友善2440带的,给大家一个链接吧:
http://download.csdn.net/detail/xie0812/6191183因为我的交叉编译器的在/opt/FriendlyARM/toolschain/4.4.3,所以应该把它拷贝到
/opt/FriendlyARM/toolschain/4.4.3/bin目录下,同时把名字改为arm-linux-mkimage。对于这个问题,可能网上有许多解决的办法,我都试,但不行,最是这么解决的。如果你用这种办法不行的话,那就在网上在找找吧。看,这就顺利的编译完成了:

Image Name:   Linux-3.3.5
Created:      Sun Sep  1 11:14:07 2013
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1181392 Bytes = 1153.70 kB = 1.13 MB
Load Address: 0x20008000
Entry Point:  0x20008000
  Image arch/arm/boot/uImage is ready

看到这个结果就证明已经编译通过了。不过现在只是内核编译通过,怎么样让它在tiny210上启动了,这个下一篇,咱们继续!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189794.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wmv转换mp4格式转换器_avi可以转化成什么格式

    wmv转换mp4格式转换器_avi可以转化成什么格式MP4的视频H264封装有2种格式:h264和avc1,对于这个细节,很容易被忽略。笔者也是在改编LIVE555流媒体时,增加mp4文件类型支持时遇到了该问题。(一)首先,从原理上了解一下这2种格式的区别:AVC1描述:H.264bitstreamwithoutstartcodes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。H264描述:H.26

    2022年10月16日
    0
  • 分布式缓存之memcached–命令测试

    1.启动Memcache常用参数2.基本命令五种基本memcached命令执行最简单的操作。这些命令和操作包括:前三个命令是用于操作存储在memcached中的键值对的标准修改命令。

    2021年12月28日
    35
  • 无源汇上下界可行流_格怎么找最小上界和最大下界

    无源汇上下界可行流_格怎么找最小上界和最大下界给定一个包含 n 个点 m 条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S 和汇点 T,求源点到汇点的最小流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。点编号从 1 到 n。输出格式输出一个整数表示最小流。如果无解,则输出 No Solution。数据范围1≤n≤50003,1≤m≤125003,1≤a,b≤n,0≤c≤d≤21474836

    2022年8月9日
    0
  • 如何升级PowerShell

    如何升级PowerShell

    2021年11月26日
    54
  • 两种方式完成批处理的优缺点

    两种方式完成批处理的优缺点

    2021年10月3日
    50
  • angular debounce throttle「建议收藏」

    angular debounce throttle「建议收藏」throttle我们这里说的throttle就是函数节流的意思。再说的通俗一点就是函数调用的频度控制器,是连续执行时间间隔控制。主要应用的场景比如:鼠标移动,mousemove事件DOM元素动态定位,window对象的resize和scroll事件有人形象的把上面说的事件形象的比喻成机关枪的扫射,throttle就是机关枪的扳机,你不放扳机,它就一直扫射。我们

    2022年6月20日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号