热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【原创】嵌入式LINUX内核移植(mini2440)09.02

【原创】嵌入式LINUX内核移植(mini2440)----09.02,Go语言社区,Golang程序员人脉社

     首先要申明下的,虽说原创,但是整个过程都是辛苦的查阅网络资料一点一点的完成。同时掺杂自己的心得。所以还是希望有些用处,同时也是自己整理一下思路,加深下记忆。

MINI2440的开发板买了很久了。年末的一段时间感觉都点堕落了,春节嘛。然后工作中又掺杂好多事情。毕竟我的工作不是做这些。这些都是自己的兴趣一直鼓动着我让我前进。我的工作是开发遥控器程序,由于在这里已经有快3年了。单片机的开发可以说还是比较简单的。所以个人一直都觉得应该向ARM发展

拿了板子很早就把资料看了遍。板子的开发资料还是很全的。有需要的我可以共享下。

好了,切入正题。

准备:

linux的内核一直在不断更新,目前我知道的是2.6.26.

GCC我之前的是3.4.1,然后我也升级到了4.1.1 这里是交叉编译用的。

开发板为S3C2440的MINI2440,友善之臂的产品。

虚拟环境为VMware

1.

好了,准备好了这些就可以开始了

解压好2.6.26 其实任意地方都行 这里无所谓,


然后立马接着打开这里的makefile文件 必须修改编译器

#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
修改为

ARCH ?= arm
CROSS_COMPILE ?= /usr/local/4.1.1/bin/arm-xscale-linux-gnu-

路径是你自己的GCC的路径。

2.

这样就可以用自己的GCC生成一个默认配置文件

# make s3c2410_defconfig

3.

增加yaffs2系统支持和devfs文件系统支持

yaffs2的加入则必须从以前的内核里拷出/fs/yaffs2文件夹放入新的内核的同样位置

然后修改/fs/Kconfig文件

menu "Miscellaneous filesystems" 后面添加

# Patched by YAFFS
source "fs/yaffs2/Kconfig" 整合yaffs系统

menu "Pseudo filesystems" 后面加入原内核所有的DEVFS的3项,具体我就不贴了,旧内核文件应该都有的。

4.

可以修改晶振了,否则编译后串口显示会有乱码

arch/arm/mach-s3c2440/mach-smdk2440.c 文件中的 s3c24xx_init_clocks(16934400);

修改为12M

5.

然后就要分区了。

我的分区是3个这点也是完全摘自旧内核分区,其实也是为了避免错误的产生

当然新的内核的分区文件发生了改变 现在生效的是arch/arm/plat-s3c24xx/common-smdk.c

打开此文件 找到

static struct mtd_partition smdk_default_nand_part[]

全部替代掉。

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.size = 0x00020000,
.offset = 0X00000000,
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset =0x00250000,
.size =0x03dac000,
}
};


显然这样就只有3个分区内核启动后是可以看得到的 。

6.

修改cpu ID,不修改将会出现无法进入内核由于CPU mach_type 不对应找不到对应的CPU。

arch/arm/tools/mach-types 这个文件打开修改对应CPU 的ID

比如我修改 S3C2410 对应为 782(我的VIVI的ID)。这样就可以找到S3C2410了

当然有人说直接修改VIVI ,我要说VIVI 没有源码(SUPERVIVI,友善的)。软件式的修改每次重新烧写到NANDflash都得再来一次修改 麻烦

7.

基本差不多了 ,还有一个校验的问题

drivers/mtd/nand/s3c2410.c
NAND_ECC_SOFT;----》NAND_ECC_NONE;

8.

修改完成,可以进行内核配置了。

MAKE menuconfig


如果仅仅是测试移植的话 很多时候很多东西可以不用管

Boot options 要改 root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc cOnsole=ttySAC1,115200 devfs=mount mem=64

System Type 要选上 2410

yaffs 文件系统添加上 虽然我们启动方式中文件系统是cramfs 但是用yaffs时可以用到

devfs 文件系统也得加上

9.

配置都完成了 保存退出 编译内核了 不出意外 2分钟完成

可以烧入 VIVI zImage filesystem 测试你的内核了

+---------------------------------------------+
| S3C2440A USB Downloader ver R0.03 2004 Jan |
+---------------------------------------------+
USB: IN_ENDPOINT:1 OUT_ENDPOINT:3
FORMAT: +++
NOTE: Power off/on or press the reset button for 1 sec
in order to get a valid USB device address.

NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Could not found stored vivi parameters. Use default vivi parameters.
Press Return to start the LINUX/Wince now, any other key for vivi
Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc cOnsole=ttySA
C0"
MACH_TYPE = 782
NOW, Booting Linux......
Uncompressing Linux.............................................................
......................................... done, booting the kernel.
Linux version 2.6.26 (root@lynn-desktop) (gcc version 4.1.1) #6 Tue Jan 13 16:58
:30 CST 2009
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: SMDK2410
ATAG_INITRD is deprecated; please update your bootloader.
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz
S3C24XX Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00020000 : "vivi"
0x00050000-0x00250000 : "kernel"
0x00250000-0x03ffc000 : "root"


推荐阅读
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • 对于以压缩包形式发布的软件,其目录中通常包含一个配置脚本 `configure`。该脚本的主要功能是确定编译所需的各项参数,如头文件的位置和链接库的路径,并生成相应的 `Makefile` 以供编译使用。通过运行此脚本,开发者可以确保软件在不同环境下的正确编译与安装。此外,该脚本还能够检测系统依赖项,进一步提高编译过程的可靠性和兼容性。 ... [详细]
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
  • 《软件测试精要》深度解析与实战经验分享
    《软件测试精要》深度解析与实战经验分享,系统梳理了软件测试的核心概念与关键原则,结合实际项目中的测试经验和教训,详细探讨了测试分类、测试权衡要素、测试效率、测试覆盖率以及测试框架的引入和用例设计等内容,为读者提供了全面而实用的指导。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • Android开发常见问题汇总(含Gradle解决方案)第二篇
    本文继续深入探讨Android开发中常见的问题及其解决方案,特别聚焦于Gradle相关的挑战。通过详细分析和实例演示,帮助开发者高效解决构建过程中的各种难题,提升开发效率和项目稳定性。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 系统管理员可以通过多种方法实时监控Linux系统中的用户活动,包括当前已登录的用户及其正在进行的操作。利用特定的命令和工具,管理员可以轻松获取这些信息,确保系统的安全性和稳定性。例如,使用`who`、`w`或`last`等命令可以快速查看当前登录的用户及其活动详情。 ... [详细]
  • 在尝试访问一台长时间未使用的Ubuntu 16.04服务器时,遇到了中文字符显示为乱码的问题。此问题可能源于LC_CTYPE或LC_ALL环境变量配置不当。这些变量控制着系统对字符编码的处理方式,如果设置不正确,可能会导致非英文字符无法正常显示。为了确保系统的稳定性和兼容性,建议检查并调整这些环境变量的设置,以恢复正常的中文字符显示功能。 ... [详细]
  • 深入解析Java中的进程与线程机制
    在Java中,进程与线程是程序执行的基本单元。进程代表了程序的运行实例,包含了独立的内存空间和系统资源,如CPU时间、内存、文件和I/O接口。操作系统通过进程来管理和分配这些资源,确保每个程序能够高效、安全地运行。线程则是进程内的基本调度单位,多个线程可以共享进程的资源,从而实现高效的并发处理。本文将深入探讨Java中的进程与线程机制,分析其工作原理和应用场景。 ... [详细]
  • 在上篇文章的基础上,本文将继续探讨 Linux 设备驱动中的设备模型与 `devicedriverbus` 机制。在将设备注册到总线之前,需要先创建 `device` 对象。可以通过静态定义 `device` 结构体变量,并调用 `device_register` 函数来完成这一过程。此外,文章还将详细解析设备模型的内部工作机制,以及 `devicedriverbus` 机制如何实现设备与驱动的自动匹配和管理。 ... [详细]
author-avatar
祗想抱著伱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有