Linux移植一_linux从零开始移植

Linux移植一_linux从零开始移植Linux移植一本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.现在手上有两个开发板,一个是tiny6410,一个是OK6410-A.tiny6410上跑的是linux2.6.38,支持alsa,uboot支持yaffs2系统以及从sd卡启动linux,并且移植了qte的库.而ok6410上跑的是linux2.6.36,没有

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

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Linux移植一

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


现在手上有两个开发板,一个是tiny6410,一个是OK6410-A.tiny6410上跑的是linux2.6.38,支持alsa,uboot支持yaffs2系统以及从sd卡启动linux,并且移植了qte的库.而ok6410上跑的是linux2.6.36,没有移植alsa库,默认安装的系统为cramfs系统,yaffs2系统需要再安装.用户空间音频编程仅支持oss方式,可以跑qtopia,不过qte库未移植或至少不完整.uboot仅支持从sd卡烧录uboot,不能直接启动linux.


总的来说tiny6410在linux方面提供了更全面的支持.不过在核心板的PCB设计上tiny6410至少在声卡这块远没有ok6410好,所以接下来我的工作是将tiny6410提供的linux2.6.38移植到ok6410上.方案有两种:

1.用ok6410提供的uboot + linux2.6.38

2.用tiny6410提供的uboot + linux2.6.38

先尝试第一种.


ok6410与tiny6410硬件资源差不多,都是2G的flash和256M的ram.ram型号相同为K4X1G163PE (两块),flash型号不同,ok6410是K9GAG08U0D,mlc一代。tiny6410是K9GAG08U0E,mlc二代。


移植方法:

进入2.6.38目录,/arm/mach-s3c64xx目录下即存放目标板子资源的地方.我需要修改的是mach-mini6410.c文件。使它的flash分区方式与ok6410提供的uboot保持一致.修改如下:

struct mtd_partition mini6410_nand_part[] = { { .name = "Bootloader", .offset = 0, .size = (1 * SZ_1M), .mask_flags = MTD_CAP_NANDFLASH, }, { .name = "Kernel", .offset = (1 * SZ_1M), .size = (5*SZ_1M) , .mask_flags = MTD_CAP_NANDFLASH, }, { .name = "User", .offset = (6 * SZ_1M), .size = (120*SZ_1M) , }, { .name = "File System", .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL, } }; 


编译内核通过,加载到板子上运行出现错误:Error: unrecognized/unsupported machine ID。

原因是uboot会传递ID给内核,内核判断不一致则退出运行。

参考链接:

http://hi.baidu.com/zybuaa/blog/item/5ef9164c12fe8afcd72afc9c.html

解决方法:

修改/arm/kernel/head.s,蓝色部分为增加的内容,强制给内核所需要的ID号.

ENTRY(stext)
//add by jdh
mov    r0, #0
ldr r1,=0x9d8
ldr    r2, =0x50000100
//end

setmodePSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
@ and irqs disabled
mrcp15, 0, r9, c0, c0@ get processor id
bl__lookup_processor_type@ r5=procinfo r9=cpuid
movsr10, r5@ invalid processor (r5=0)?


再次编译内核,并加载到目标板上运行.

这一次能够正常加载内核,并能够识别声卡.

ALSA device list:
  #0: MINI6410
TCP cubic registered
NET: Registered protocol family 17
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
s3c-rtc s3c64xx-rtc: setting system clock to 2000-01-01 00:00:01 UTC (946684801)

Freeing init memory: 1412K
mount: mounting /dev/mtdblock2 on /r failed: No such device
/init: line 103: can't open /r/dev/console: no such file
Kernel panic - not syncing: Attempted to kill init!
[<c0178c44>] (unwind_backtrace+0x0/0xe4) from [<c0516104>] (panic+0x58/0x174)
[<c0516104>] (panic+0x58/0x174) from [<c018ae54>] (do_exit+0x68/0x5e4)
[<c018ae54>] (do_exit+0x68/0x5e4) from [<c018b694>] (do_group_exit+0x90/0xc4)
[<c018b694>] (do_group_exit+0x90/0xc4) from [<c018b6d8>] (sys_exit_group+0x10/0x
18)
one_wire_status: 2
[<c018b6d8>] (sys_exit_group+0x10/0x18) from [<c01735e0>] (ret_fast_syscall+0x0/
0x30)
one_wire_status: 4


最后遇到的问题是文件系统不符合的缘故.上面所用的是ok6410提供的cramfs系统.

我没有兴趣继续去修改cramfs系统,因为这是只读系统.所以接下来准备做第二步:在ok6410上移植用tiny6410提供的uboot + linux2.6.38.





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

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

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


相关推荐

  • 计算机设备问题代码43,双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程…「建议收藏」

    计算机设备问题代码43,双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程…「建议收藏」金士顿U盘做的启动盘(8G),在别人的电脑上储存文件正常,但在自己的电脑上无法识别,在设备管理器中显示黄色叹号,属性显示“该设备存在问题,windows已将其停止,代码43”本机win7系统,别人电脑为XP系统。已将:禁用注册表dos设置节电卸载等办法都试过了,毫无头绪!怎么办呢?Windows已将其停止。(代码43)而苦恼。那小编今天就教你处理双击unknowndevice由于…

    2022年6月28日
    51
  • ubuntu安装qt4.8.7_ubuntu18.04安装教程

    ubuntu安装qt4.8.7_ubuntu18.04安装教程文章目录更新源安装qt更新源最好用清华的源,比较快$sudoapt-getupdate安装qt$sudoapt-getinstallqt*

    2022年10月15日
    0
  • 终于有人把数据挖掘讲明白了

    终于有人把数据挖掘讲明白了01什么是数据挖掘数据挖掘(DataMining)应该是一门大家都听说过,但又不太容易说清楚的课程。在数据科学领域,乃至在更大的计算机科学领域,数据挖掘就好比山东蓝翔,大家不一定都知道挖…

    2022年6月18日
    55
  • python anaconda和pycharm的区别_质量度三者关系

    python anaconda和pycharm的区别_质量度三者关系哈喽~大家好呀Python作为深度学习和人工智能学习的热门语言,你们知道Python、Pycharm、Anaconda三者之间的关系吗?学习一门语言,除了学会其简单的语法之外还需要对其进行运行和实现,才能实现和发挥其功能和作用。下面来介绍运行Python代码常用到的工具总结。一.Python、Pycharm、Anaconda关系介绍1.PythonPython是一种跨平台的计算机程序语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动…

    2022年8月29日
    0
  • pattern 正则_JAVA 正则表达式

    pattern 正则_JAVA 正则表达式1.组(Group)组是正则表达式的一个子集,每个组都有一个编号,通过从左到右计算左括号来进行编号。正则表达式“((A)(B©))”有4个组:((A)(B©))(A)(B©)©组0表示整个正则表达式,除组0外每一个组都被一对括号括住,如果一个正则表达式里面没有括号,则它只有组0即整个表达式。下面是组号的示例程序:Patternp=Pattern.compile(“([0-9]+)([^0-9]+)”);Matcherm1=p.matcher(“namejack,age18

    2025年6月1日
    1
  • 浅谈ArrayList动态扩容

    浅谈ArrayList动态扩容环境:eclipse,jdk1.8简介ArrayList实现了List接口,继承了AbstractList,底层是数组实现的,一般我们把它认为是可以自增扩容的数组。它是非线程安全的,一般多用于单线程环境下(与Vector最大的区别就是,Vector是线程安全的,所以ArrayList性能相对Vector会好些),它实现了Serializable接口,因此它支持序列化,能够通过序列化传输

    2022年6月10日
    29

发表回复

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

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