Linux2.6内核2410平台上的移植

发布者:皮球最新更新时间:2016-12-04 来源: eefocus关键字:Linux2.6内核  2410平台  移植 手机看文章 扫描二维码
随时随地手机看文章

一、准备必要的文件

1.首先去官方网站下载最新的llinux内核                  

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2

2.因为linux2.6.14内核需要更新版本的编译器,所以需要下载交叉编译器

ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2

二、安装文件

1、把gcc解压到/usr/local/arm/3.4.1目录下

2、接下来需要解压linux内核,输入命令:

# tar -jxvf linux-2.6.14.tar.bz2

将内核解压到linux-2.6.14目录下。

三、修改makefile文件                            

内 核的编译是根据makefile文件的指示进行的,Makefile文件来组织内核的各模块之间的关系,记录了各个模块之间的相互联系和依赖关系。首先修 改linux-2.6.14的根目录下的makfile文件,须改的主要内容是目标代码的类型和为编译内核指定一个编译器。注释掉以下内容:

   #ARCH   ?= $(SUBARCH)

   #CROSS_COMPILE      ?=

   增加如下内容:

   ARCH     : = arm


   CROSS_COMPILE=/usr/local/arm/3.4.1/bin/arm-linux-


四、安装根文件系统

   1.首先对flash进行分区。网上的经典文章《Linux 2.6.10 以后版本对S3C2410的支持》仅提到了对Nand flash分区的方法,对Nor flash不适用。对Nor flash的分区,是通过在linux/drivers/mtd/maps下增加特定mapping驱动程序来实现。该目录下的驱动程序结构相似,可以找 一个来修改成自己的。我用的是cfi_flagadm.c这个。

       cp cfi_flagadm.c s3c2410.c

    将FLASH_PHYS_ADDR和FLASH_SIZE这两个宏分别修改成自己板子的flash起始地址和大小。然后修改结构体数组flagadm_parts添加自己的分区信息。

    接下来告诉内核使用该驱动程序。修改maps目录下的Kconfig文件,该文件决定出现在menuconfig中的项目,在config MTD_CDB89712之后添加

    config MTD_S3C2410

           tristate "gggggg 2410 board"

    修改该目录下的Makefile,添加如下内容:

    obj-$(CONFIG_MTD_S3C2410)       += s3c2410.o

    现在make menuconfig时,在MTD项目中将出现gggggg 2410 board选项,选中它并重新编译内核就完成了分区工作,启动时将看到分区信息。现在,内核可以检测到分区,并找到了压缩的RAMDISK,并试图解压 缩。如果你使用smdk2410默认配置,这时会报错,类似RAMDISK:incomplete 云云。解决办法很简单,将内核配置中的BLK_DEV_RAM_SIZE的值从默认的4096改为8192即可。

    2.在linux/arch/arm/mach-s3c2410/mach-smdk2410.c中添加ramdisk支持相关的代码。具体请参考我的文件贴图。

    3.修改启动参数:

   修改 linux/arch/arm/kernel/文件夹下的head.S文件如下:
ENTRY(stext)
/****************boot required ggggggg****************/
         mov     r0,     #0
         mov     r1,     #0xc1
         ldr     r2,     =0x30000100
/*********************end****************************/
r0恒为0,r1为architecture ID。r2为启动地址。

五、支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改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

六、配置内核产生.config文件

cp arch/arm/configs/smdk2410_defconfig .config

make menuconfig

在smdk2410_defconfig基础上,我所增删的内核配置项如下:

Loadable module support >

[*] Enable loadable module support

[*] Automatic kernel module loading

System Type >

[*] S3C2410 DMA support

Boot options >

Default kernel command string:

noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttySAC0,115200

#console=ttySAC0,115200使kernel启动期间的信息全部输出到串口#    # 0上.2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编 #程。用户空间的串口编程针对的仍是/dev/ttyS0等

Floating point emulation >

[*] NWFPE math emulation

This is necessary to run most binaries!

#接下来要做的是对内核MTD子系统的设置

Device Drivers >

Memory Technology Devices (MTD) >

[*] MTD partitioning support

#支持MTD分区,这样我们在前面设置的分区才有意义

[*] Command line partition table parsing

#支持从命令行设置flash分区信息,灵活

RAM/ROM/Flash chip drivers >

<*> Detect flash chips by Common Flash

Interface (CFI) probe

<*> Detect nonCFI

AMD/JEDECcompatible

flash chips

<*> Support for Intel/Sharp flash chips

<*> Support for AMD/Fujitsu flash chips

<*> Support for ROM chips in bus mapping

NAND Flash Device Drivers >

<*> NAND Device Support

<*> NAND Flash support for S3C2410/S3C2440 SoC

Character devices >

[*] Nonstandard

serial port support

[*] S3C2410 RTC Driver

#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是ext2,故做如下配置

File systems >

<*> Second extended fs support #ext2的支持

Pseudo filesystems >

[*] /proc file system support

[*] Virtual memory file system support (former shm fs)

[*] /dev file system support (OBSOLETE)

[*] Automatically mount at boot (NEW)

#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了

Miscellaneous filesystems >

<*> Compressed ROM file system support (cramfs)

#支持cramfs

Network File Systems >

<*> NFS file system support

保存退出,产生.config文件.

.config文件能从提供的2.4.14.1的内核包中找到,文件名为config.back.

七、编译内核

make zImage

八、下载到开发板就可以启动了。


关键字:Linux2.6内核  2410平台  移植 引用地址:Linux2.6内核2410平台上的移植

上一篇:在内存中调试STM32 - IAR平台
下一篇:关于ARM汇编中字符串表达式及运算符总结如下

推荐阅读最新更新时间:2024-03-16 15:23

ARM+llinux系统移植3G拨号上网收发短信(二)
一、发送text格式的短信 给联通发text格式的短信: ~ : microcom -s 115200 /dev/ttyUSB1 at OK 设置短信格式为Text模式: at+cmgf=1 OK at+cmgs= +861300711**** 输入发送的内容: hello (内容写完后按一下ctrl + z发送) +CMGS: 48 OK 给电信发text格式的短信: ~ : microcom -s 115200 /dev/ttyUSB1 at OK 设置短信格式为Text模式: at+cmgf=1 OK at+cmgs= +861532736**** 设
[单片机]
ARM+llinux系统<font color='red'>移植</font>3G拨号上网收发短信(二)
Armboot在EV40评估板上的移植
摘要:介绍Armboot以及EV40评估板的特点;详细讨论Armboot在EV40上的移植并给出主要代码;以Flash编程为例,介绍与评估板相关Armboot命令的实现。 关键词:Armboot AT91M40800 ARM 移植 1 Armboot简介 Armboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash;允许映像文件经由bootp、dhcp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。Armboot源码公开,可以在http://www.sourceforg.ne
[应用]
第一章、Tiny4412 U-BOOT移植一 说明
一、移植前说明: 1、 特别声明:此文档是我的学习文档,里面肯定有错误地方,仅供参考! 2、移植平台:友善之臂Tiny4412SDK1306平台。 3、移植系统:Ubuntu12.04 4、移植原始CODE:平台光盘中由Samsung提供的U-Boot-samsung-dev.tar.bz2。为什么用这个,只能说因为我也菜鸟,我找了u-boot官网最新的代码看了一下,我没有在boardsamsung目录下找到与Exynos4412芯片很相关的平台目录,估计是有的,只是由于我很菜,不清楚是那一个,为了省自学时间,还是用三星提供的U-Boot源码。 5、参考文档:各相关手册,主要手册是Exynos4412 RISC Microproc
[单片机]
第一章、Tiny4412 U-BOOT<font color='red'>移植</font>一 说明
单片机---ESP8266移植lvgl(一)
前言 最近看着这个LVGL真是挺喜欢,能做出来各种花哨的界面,就像我们各大车企造车一样,性能的提升确实很难,有时候快个0.1秒,都需要多年的累计,但是外观不一样了,改改图纸,立马就性能了,虽然动力拉跨,但是颜值不输,毕竟这个社会,颜值还是硬道理啊。 lvgl核心移植 搜了一下,貌似只有arduino版本的,没有c语言版本的,那不行啊,我不允许 不过我发现了ESP32版本的C语言的,其实lvgl在里面只是作为一个组件(component),所以自然就可以将ESP32版本中的lvgl拷贝过来,放在我们ESP8266版本下, 之所以用这个,就是因为ESP32版本,将kconfig给添加好了,我们可以通过配置面板,进行参数配
[单片机]
单片机---ESP8266<font color='red'>移植</font>lvgl(一)
4412 移植x264并且YUV422转x264
一、YUV422转换规律    做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于做视频领域的人而言,至关重要。本文就是根据我的学习和了解,简单地介绍如何分析YUV数据流。 YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。 与我们熟知的RGB类
[单片机]
4412 <font color='red'>移植</font>x264并且YUV422转x264
关于u-boot移植时的NAND FLASH问题
在移植U-BOOT的时候,大部分时间都是卡在nand flash里,因为我的nand flash容量比较大,512M的,网上的一般都是256M的吧,然后我就蛋疼蛋疼的搞了好久好久。。。 遇到的问题是这样:u-boot无法对nand flash正常读写,总是识别出各种坏块,几乎把整块nand都当作坏块了,最明显的就是保存环境变量时,使用saveenv命令,提示擦除时遇到坏块。 各种找原因,刚开始以为是底层驱动函数没有写好,然后就研究底层驱动开始,一点一点的理解。。。 在这里普及一下NAND的基本知识吧,刚开始我也稀里糊涂的。 NAND flash以页为单位读写数据,而以块为单位擦除数据。按照这样
[单片机]
基于tiny4412的Linux内核移植(支持device tree)(二)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 步骤 继续上文。 由于Linux-4.4.0对tiny4412已经有了很好的支持,所以留给我
[单片机]
STM32 移植 STemwin
移植STemwin 平台STM32F429+LTDC+SDRAM 其实不难就是给自己做个记录,年纪大了记性不好。。。 自己先驱动好TFTLCD, LTDC, SDRAM等 Cubemx配置增大堆栈大小,不然容易出错 需要添加以下文件进行配置 挨个文件配置 GUIConf.c里面主要修改ram大小,酌情而定,不宜太大。 #define GUI_NUMBYTES (1024)*50 GUIDRV_Template.c里面修改以下函数TBD by customer部分添加画点,读点,填充函数 static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, i
[单片机]
STM32 <font color='red'>移植</font> STemwin
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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