linux 2.6.24.4在S3C2410上的移植(内核配置)(基于GEC2410)

发布者:心灵捕手最新更新时间:2022-06-23 来源: eefocus关键字:linux  S3C2410  移植 手机看文章 扫描二维码
随时随地手机看文章

移植完u-boot后,接下来就是linux内核了.以下记录我移植的步骤,如有问题,欢迎指正.

1.下载linux kernel源代码

到http://www.kernel.org/下载linux内核源代码,这里我们使用2.6.24.4的内核.

解压linux-2.6.24.4.tar.bz2

[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz2

[matt@localhost GEC2410]$ cd linux-2.6.24.4


2.修改顶层Makefile,设置交叉编译器

ARCH  ?= arm

CROSS_COMPILE ?= /home/GEC2410/toolchain/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-


3. 复制编译配置文件到linux-2.6.24.4下为默认配置文件.config,移植过程以sdmk2410开发板为模板.

同时将复制一个新的配置文件gec2410.defconfig放到configs目录下,最近的配置都保存到这个这个文件,这样就可以直接用make gec2410_defconfig进行配置了.

[matt@localhostlinux-2.6.24.4]$cp arch/arm/configs/s3c2410_defconfig arch/arm/configs/gec2410.defconfig

[matt@localhostlinux-2.6.24.4]$cp arch/arm/configs/s3c2410_defconfig .config


3.设置Nand分区

我们将nand(64M)分成4个区,分别为u-boot 1MB, Linux Kernel 3MB, Root 40MB, User 20MB.

修改arch/arm/plat-s3c24xx/common-smdk.c中108行的smdk_default_nand_part[]如下:

[matt@localhost linux-2.6.24.4]$ vim arch/arm/plat-s3c24xx/common-smdk.c



4. 禁止Flash ECC校验

由于uboot通过软件ECC,而内核是硬件ECC,所以这里将内核ECC禁止.

修改drivers/mtd/nand/s3c2410.c中的s3c2410_nand_init_chip()函数,在该函数体最后加上一句:

chip->eccmode = NAND_ECC_NONE;


5 配置内核

(1) 支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件

vi fs/Kconfig

找到menu "Pseudo filesystems"

添加如下语句:

config DEVFS_FS

bool "/dev file system support (OBSOLETE)"

default y

config DEVFS_MOUNT

bool "Automatically mount at boot"

default y

depends on DEVFS_FS

(2)内核配置

首先加载SMDK2410的内核配置

[matt@localhost linux-2.6.24.4]$make smdk2410_defconfig

[matt@localhost linux-2.6.24.4]$ make menuconfig

增加MTD,Nand支持,选中

Device Drivers-Memory Technology Device (MTD) support

选中使用默认配置即可,其中包括以下等支持:

<*>MTD partitioning support

<*>Command line partition table parsing

<*>Direct char device access to MTD devices

<*>Caching block device access to MTD devices

<*>NAND Device Support

      <*>NAND Flash support for S3C2410/S3C2440 SoC

增加FS支持(NFS,cramfs):

File System:

<*>Network File Systems

       Miscellaneous filesystems -->

          <*>Compressed ROM file system support (cramfs)  

      Pseudo filesystems -->

          <*>/dev file system support (OBSOLETE)

可以看到上面设置的devfs已经被支持了.

保存配置文件,下次就可以用make gec2410_defconfig来加载配置信息了.

[matt@localhostlinux-2.6.24.4]$cp .config arch/arm/configs/gec2410_defconfig


6.制作uImage

zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。

可以使用mkimage来生成uImage,该工具位于u-boot下的tools目录,编译完u-boot就可以找到这个工具.我们拷到/linux2.6.24/arm/arm/boot/,用来将zImage生成uImage.

其参数含义为

         -A ==> set architecture to 'arch'   //用于指定CPU类型,比如ARM

          -O ==> set operating system to 'os'  //用于指定操作系统,比如Linux

          -T ==> set image type to 'type'      //用于指定image类型,比如Kernel

          -C ==> set compression type 'comp'   //指定压缩类型

          -a ==> set load address to 'addr' (hex)  //指定image的载入地址

          -e ==> set entry point to 'ep' (hex)     //内核的入口地址,一般是:image的载入地址+0x40(信息头的大小)

          -n ==> set image name to 'name'          //image在头结构中的命名

          -d ==> use image data from 'datafile'    //无头信息的image文件名

          -x ==> set XIP (execute in place)        //设置执行位置



 


[matt@localhost boot]$ ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.24 -d zImage uImage

为了方便起见,我们将这个命令写入到一个mkuimage.sh的批处理文件中,这样只要运行这个文件就不必输入这么长的命令了.

mkuimage.sh:

echo "making uImage..."

./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.24 -d zImage uImage


echo "making uImage finished..."

然后运行:

[matt@localhost linux-2.6.24.4]$ cd arch/arm/boot

[matt@localhost boot]$ chmod 777 mkuImage.sh

[matt@localhost boot]$ sh mkuImage.sh(或者./mkuImage.sh)

making uImage...

Image Name:   linux-2.6.24

Created:      Mon May 24 10:06:09 2010

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    1567656 Bytes = 1530.91 kB = 1.50 MB

Load Address: 0x30008000

Entry Point:  0x30008040

making uImage finished...

就可以看到uImage生成了.


使用u-boot烧写uImage到nand,设置启动参数让u-boot自动加载uImage运行内核.

GEC2410#tftp 30008000 uImage

GEC2410#nand erase 100000 200000

GEC2410#nand write 30008000 100000 200000

GEC2410#setenv bootcmd nand read 30008000 100000 200000/;bootm


GEC2410#saveenv

GEC2410#bootm


## Booting image at 30008000 ...

   Image Name:   linux-2.6.24

   Created:      2010-05-21   8:35:34 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    1567720 Bytes =  1.5 MB

   Load Address: 30008000

   Entry Point:  30008040

   Verifying Checksum ... OK

   XIP Kernel Image ... OK


Starting kernel ...


Uncompressing Linux.............................................................

......................................... done, booting the kernel.

......

这时linux就启动了,但这时cs8900网卡驱动还没有,根文件系统还没有.系统会停在.

No filesystem could mount root, tried:  ext3 ext2 cramfs msdos vfat romfs

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)

下一步先移植cs8900网卡驱动,然后是根文件系统.

关键字:linux  S3C2410  移植 引用地址:linux 2.6.24.4在S3C2410上的移植(内核配置)(基于GEC2410)

上一篇:linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)
下一篇:UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)

推荐阅读最新更新时间:2024-11-17 00:49

Linux2.6.32驱动笔记(4)ioctl方法解析及mini2440-led驱动实现
摘要: 介绍了字符设备驱动的控制方式——ioctl,同时利用该方式在mini2440上实现led驱动。 驱动中,除了read,write,open,close之外,还有很多的访问方式,其中对于设备的控制,ioctl是一种重要的方式。 一、ioctl函数 int ioctl(int fd,unsigned long cmd,…) fd:要控制的设备文件描述符 cmd:发送给设备的控制命令 …:可选参数,依赖于第二个cmd参数 当应用程序使用ioctl的时候,驱动程序将由如下驱动函数来响应: 2.6.36内核以前: long(*ioctl)(struct inode
[单片机]
STM32F103_SD卡FatFs文件系统移植
一、下载解压官方源码压缩包 1 添加下列文件至项目列表并包含头文件。 二、配置函数接口 主要有以下几个文件 : diskio.c ffconf.h 1 官方源码已经有写好的代码框架,只需要添加ATA(指SD卡)部分即可 (1) 获取设备状态部分,由于SD卡起始状态特别多,此处默认检测到SD卡设备。 case ATA : //默认设备检测成功 status &= ~STA_NOINIT; break; (2) 设备初始化部分,调用sdio.c中的初始化函数即可。 case ATA : if(SD_Init()==SD_OK) {
[单片机]
STM32F103_SD卡FatFs文件系统<font color='red'>移植</font>
基于Linux/Qtopia的车载温度网络采集技术
本文在嵌入式Linux平台上实现了车载信息采集系统的一部分 汽车常规温度的数据采集,如采集车内温度、暖风或空调温度、车外温度、水箱温度等。DS18B20是一种可组网单总线数字温度传感器,为信息采集提供了经济有效的可行方案。嵌入式Linux以其源码开放、容易定制和扩展、多硬件平台支持和内置网络功能等优良性能,逐渐成为车载设备广泛使用的系统平台。本文涉及的系统使用三星公司的S3C2410AL20处理器,操作系统采用 2.6.8.1内核Linux,GUI采用Trolltech公司的Qtopia;功能上主要实现:各路温度的采集显示、音频报警、温度数据的存储、相关功能设置等。当需要语音提示或报警时,应用程序调用语音模块;当需要存储或显示历史数
[单片机]
基于<font color='red'>Linux</font>/Qtopia的车载温度网络采集技术
-boot移植(十一)---代码修改---支持nandflash
一、移植前的修改 1.1 include/configs/jz2440修改   原来的定义:      可以看出,要先定义CONFIG_CMD_NAND才能使能NANDFlash。   这个在我们文件中的82行有定义,所以不需要定义了。      将里面的S3C2410全部改为S3C2440:    1.2 drivers/mtd/nand/修改   拷贝s3c2410_nand.c 成 s3c2440_nand.c      在此目录的makefile中添加 s3c2440_nand.c      修改s3c2440_nand.c 文件,从board_nand_init 逐行检测修改,代码如下: 1 #include
[单片机]
-boot<font color='red'>移植</font>(十一)---代码修改---支持nandflash
ARM Linux中一些重要的宏及地址定义
1)TEXT_OFFSET 内核在RAM中的起始位置相对于RAM起始地址偏移。值为0x00008000 。/arch/arm/Makefile 111 textofs-y := 0x00008000 112 textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000 113 # We don‘t want the htc bootloader to corrupt kernel during resume 114 textofs-$(CONFIG_PM_H1940) := 0x00108000 115 # SA1111 DMA bug: we don’t want the kernel to liv
[单片机]
XScale PXA270在Linux下的FPGA设备驱动
引言 Intel公司推出的XScale采用ARM V5TE结构,是Strong ARM的升级换代产品。XScale PXA270处理器最高主频可达到624M赫兹,加入了Wireless MMX、Intel SpeedStep等新技术,以其高性能、低功耗、多功能等特点在信息家电、工业控制等领域得到了广泛的应用。在嵌入式控制中,“微处理器+FPGA”是一种常用的解决方案,FPGA(现场可编程门阵列)有编程方便、集成度高、速度快等特点,电子设计人员可以通过硬件编程的方法来实现FPGA芯片各种功能的开发,在我们的一个数控平台的研究项目中,采用XScale PXA270作为主CPU,并对其进行FPGA扩展,使其具有插补、电机驱动、信号处
[应用]
Linux驱动之输入子系统简析
输入子系统由驱动层、输入子系统核心、事件处理层三部分组成。一个输入事件,如鼠标移动、键盘按下等通过Driver- Inputcore- Event handler- userspace的顺序到达用户控件的应用程序。 系统框图 假设打开一个字符设备驱动程序/dev/event0,event代表的是输入子系统的设备文件,当应用程序调用C库的open函数后,open函数会进入系统调用,最后定位到driversinputinput.c文件下(这个文件就是核心层)的。这个函数的功能主要是根据设备的次设备号找到新的fops结构,然后切换到新的fops结构,然后调用它的打开函数。输入子系统的主设备号恒为#define INPUT_MAJOR
[单片机]
<font color='red'>Linux</font>驱动之输入子系统简析
基于Linux的Socket网络编程的性能优化
   1 引言   随着Intenet的日益发展和普及,网络在嵌入式系统中应用非常广泛,越来越多的嵌入式设备采用Linux操作系统。Linux是一个源代码公开的免费操作系统,具有强移植性,所以对基于Linux的Socket网络编程的研究越来越重要。   Socket实际是网络传输层供给应用层的编程接口。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。Socket就是应用层与传输层之间的桥梁。如图2所示。   使用Socket编程时可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过Internet在全球范围内进行通信。编写并运行 So
[嵌入式]

推荐帖子

一些hercules试题及答案
网上搜到的一份资料,一些hercules试题及答案,如果你的题目刚好碰到,就偷着乐吧,我撞到一题,娃哈哈哈第1题:VIM模块有()个中断请求源?A32B64C96D128正确答案:C所选答案:B第2题:TMS570LS中的存储器保护单元(MPU)的属性不可以配置为?A只读B只写C可读写D单次擦写正确答案:D所选答案:D第3题:ESM
wojiaomt 微控制器 MCU
猜猜这是啥?
猜猜这是啥?电源路由或者交换机我看见后面的网线了!这个是一个电脑的主机吧,我看到有一个类似CPU散热器的东西
老虎油 DIY/开源硬件专区
multisim中的晶振怎么改不了频率?
在multisim10中用门电路做的晶振怎么不能改变频率?改变了晶振型号还是不管用,望高手指点multisim中的晶振怎么改不了频率?
longlianxi 嵌入式系统
四层板的电源层需不需要弄成完整的一个平面?
一般四层板的顺序是:信号层-地层-电源层-信号层;为了保证最小的回路路径,地层需要保持完整的一整块;那么,电源层是否也需要保持完整呢?保持完整的电源层可以和地层形成一个很大的分布电容,对每个信号都起到一定的滤波作用,并且也有一定的屏蔽效果。但是我经常看到别人的参考设计,电源层是直接拉线连接的,并没有搞成完整的一个平面。如下TI的一个蓝牙参考设计大家怎么看?四层板的电源层需不需要弄成完整的一个平面?纠结这个干啥呢满足要求根据自己的需求就行了散热什么的和
sfcsdc PCB设计
可以运行CircuitPython或Arduino的FeatherSnow
FeatherSnow,可以使用CircuitPython或Arduino释放编程创造力。可以运行CircuitPython或Arduino的FeatherSnow
dcexpert MicroPython开源版块
MicroPython 移植到 WCH-CH32V307 RISC-V 单片机
概述CH32V305/7系列是基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口U(S)ART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。系统框图产品特点 RISC-V4F处理器,最高144MHz系统主频 支持单周期
dcexpert MicroPython开源版块
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved