基于TQ2440的linux-2.6.30.4内核移植

发布者:RadiantGlow最新更新时间:2021-07-26 来源: eefocus关键字:TQ2440  linux-2  6  内核移植 手机看文章 扫描二维码
随时随地手机看文章

移植环境

CPU:S3C2440

交叉编译器:arm-linux-gcc-4.3.3

虚拟机系统:Ubuntu12.04

参考资料:《天嵌科技linux移植手册》


移植步骤

1、获取内核源码

网址:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

找到linux-2.6.30.4压缩包下载即可,然后拷贝到虚拟机中解压


2、在系统中添加对ARM的支持

进入内核源码根目录 Makefile中,修改

ARCH = arm

CROSS_COMPILE = arm-linux-


3、修改平台输入时钟

修改内核源码

arch/arm/mach-s3c2440/mach-smdk2440.c” 文件的大概162行或163行,把16.9344MHz改为12MHz

然后make menuconfig ,进入默认菜单保存一下


4、尝试编译内核,给内核打补丁

make uImage,出现某某未定义,其实是内核需要打补丁

可以参考以下文章 https://blog.csdn.net/pillarpeng/article/details/38282193

打完补丁后,编译生成uImage,下载到开发板,现象如下

在这里插入图片描述

5、制作自己的配置清单

先调用自带的一个默认配置单,该配置单在内核源码的arch/arm/configs/目录下面,名为:s3c2410_defconfig,该配置文件里面选择了几乎所有的和 S3C24XX 系列 CPU 相关的配置选项,在该配置单的基础上进行配置。


载入这个配置单,选择和S3C2440相关的设置项。


选择支持EABI


6、修改机器码,编译镜像

机器码保存在内核源码的“arch/arm/tools/mach-types”文件中,在大概 379 行,把原来的 362 改为 168 保存即可。这个机器码是和U-boot相匹配的。

编译uImage成功如下所示:

在这里插入图片描述

下载uImage到开发板中:

在这里插入图片描述

7、Nandflash驱动移植

到这里仅仅是可以引导了,还需要配置Nandflash。

修改内核源码“arch/arm/plat-s3c24xx/common-smdk.c”文件,在 109 行左右,有一个结构体名为:

smdk_default_nand_part[],将其修改为如下列表所示:

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = “le2440_Board_uboot”,

.offset = 0x00000000,

.size = 0x00040000,

},

[1] = {

.name = “le2440_Board_kernel”,

.offset = 0x00200000,

.size = 0x00300000,

},

[2] = {

.name = “le2440_Board_yaffs2”,

.offset = 0x00500000,

.size = MTDPART_SIZ_FULL

}

};


然后修改“drivers/mtd/nand/s3c2410.c”文件的 752 行

将原来的内容改为如下所示

chip->ecc.mode = NAND_ECC_NONE;

在内核配置单中添加上对Nandflash的支持

Device Drivers —>

<> NAND Device Support -->

<> NAND Flash support for S3C2410/S3C2440 SoC

然后编译出镜像,烧到开发版中,现象如下所示:

在这里插入图片描述

8、网卡驱动移植

因为我打算使用NFS网络文件系统来挂载根文件系统,所以只需要配置一下网卡和NFS即可。


修改 Linux-2.6.30.4 内核源码的“arch/arm/mach-s3c2440/mach-smdk2440.c”文件,添加头文件如下:

#include

在 154 行添加如下内容所示:

/* DM9000 */

static struct resource s3c_dm9k_resource[] = {

[0] = {

.start= S3C2410_CS4,

.end = S3C2410_CS4 + 3,

.flags = IORESOURCE_MEM,

},

[1] = {

.start= S3C2410_CS4 + 4,

.end = S3C2410_CS4 + 4 + 3,

.flags = IORESOURCE_MEM,

},

[2] = {

.start= IRQ_EINT7,

.end = IRQ_EINT7,

.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,

}

};

static struct dm9000_plat_data s3c_dm9k_platdata = {

.flags = DM9000_PLATF_16BITONLY,

};

struct platform_device s3c_device_dm9000 = {

.name = “dm9000”,

.id = 0,

.num_resources = ARRAY_SIZE(s3c_dm9k_resource),

.resource = s3c_dm9k_resource,

.dev = {

.platform_data = &s3c_dm9k_platdata,

}

};

在 194 行添加如下内容所示:

static struct platform_device *smdk2440_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&s3c_device_dm9000, //添加的

};

在 Linux-2.6.30.4 中“drivers/net/dm9000.c”文件中修改如下:

在 41 行添加的头文件内容如下:

#if defined(CONFIG_ARCH_S3C2410)

#include

#endif

在 1194 行添加内容如下所示:

#if defined(CONFIG_ARCH_S3C2410)

unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;

unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;

#endif

在 1209 行添加如下内容:

#if defined(CONFIG_ARCH_S3C2410)

*((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) |

S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;

*((volatile unsigned int )S3C2410_BANKCON4) = 0x1f7c;

#endif

修改 1278 行开始的内容如下所示:(红色部分为修改内容,主要是添加 mac 值)

#if defined(CONFIG_ARCH_S3C2410)

printk(“Now use the default MAC address: 10:23:45:67:89:abn”);

mac_src = “EmbedSky”;

ndev->dev_addr[0] = 0x10;

ndev->dev_addr[1] = 0x23;

ndev->dev_addr[2] = 0x45;

ndev->dev_addr[3] = 0x67;

ndev->dev_addr[4] = 0x89;

ndev->dev_addr[5] = 0xab;

#else

mac_src = “eeprom”;

/ try reading the node address from the attached EEPROM /

for (i = 0; i < 6; i += 2)

dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);

if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {

mac_src = “platform data”;

memcpy(ndev->dev_addr, pdata->dev_addr, 6);

}

if (!is_valid_ether_addr(ndev->dev_addr)) {

/ try reading from mac */

mac_src = “chip”;

for (i = 0; i < 6; i++)

ndev->dev_addr[i] = ior(db, i+DM9000_PAR);

}

if (!is_valid_ether_addr(ndev->dev_addr))

dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "

“set using ifconfign”, ndev->name);

#endif


在 1423 行添加如下内容:

#if defined(CONFIG_ARCH_S3C2410)

*(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;

*(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;

#endif


修改完以上的内容之后,输入:#make menuconfig,进入配置单,然后添加上对 DM9000 网卡和NFS的配置,之前载入的s3c2410_defconfig的配置单已经做好了这些配置,此处不再展示。


最后make uImage编译成镜像文件下载到开发板如下:

在这里插入图片描述

至此,linux-2.6.30.4内核基本移植完成,剩下的根文件系统构建和常用驱动移植下次在写。

关键字:TQ2440  linux-2  6  内核移植 引用地址:基于TQ2440的linux-2.6.30.4内核移植

上一篇:移植Linux-2.6.30.4内核之根文件系统构建
下一篇:嵌入式系统启动流程(学习笔记)

推荐阅读最新更新时间:2024-11-04 11:45

运算放大器----LM308/LM308A
LM308是精密运算放大器,对非稳压电源有足够电源抑制,其工作温度范围0~+70 C,它在10M欧电源阻抗下工作误差比在10K欧电源阻抗下工作小,积分器漂移小于500uV/秒,采用不大于1uF电容可获得大于1小时的模拟时间延迟。 1,特性: 2.管脚排列 最大输入偏置电流0.3nA 失调电流小于400pA 电源电流只有300uA(含饱和时) 保证漂移特牲 3.内部框图:
[模拟电子]
运算放大器----LM<font color='red'>30</font>8/LM<font color='red'>30</font>8A
MSP430使用库函数上手
环境搭建 编写和编译调试程序用的是ti自己出的CCS。这个应该是基于eclipse开源平台做的,和智能车隔壁双车组用英飞凌的tasking一样。 CCS:从ti官网找的v10版本(版本号接近的话应该是差不多) MSP430Ware这个是官方出的软件包,里面应该是包含了官方的库函数,当然也包含了许多相关资料。安装之后可以直接新建带有库函数的430工程。 MSP430的相关文档资料:MSP430F5529 Datasheet(芯片介绍和IO引脚等)、MSP430 User’s Guide(单片机各部分的结构框图和寄存器定义)、MSP430 DriverLib User’s Guide(官方库函数的手册,少量例程(有坑)) 从t
[单片机]
MSP4<font color='red'>30</font>使用库函数上手
msp430 看门狗寄存器定义方式
__no_init volatile union { unsigned short WDTCTL; /* Watchdog Timer Control */ struct { unsigned short WDTIS0 : 1; /* */ unsigned short WDTIS1 : 1; /* */ unsigned short WDTSSEL : 1; /* */ unsigned short WDTCNTCL : 1; /* */ unsigned short WDTTMSEL : 1; /* */ unsigned short WDTNMI
[单片机]
STM32F4 FFT 音乐频谱 不要太easy!
在数字信号处理当中,我们最常用的就是卷积和离散傅里叶变换(DFT)。可以证明卷积、相关、谱分析、滤波等都可以转化为离散傅里叶变换来实现。大学学了信号和系统、数字信号处理对于傅里叶变换有了更深的理解。 下面介绍一种超级简单的方法做一个用FFT做一个音乐频谱仪。过程中参考了正点原子的STM32F4教程,在此,要特别感谢正点原子。 先看下效果: 系统采用基于ARM-Cortex M4核的STM32F407ZGT6单片机,调用官方DSP库进行4096点FFT运算,然后实时显示音乐信号的频谱。 下面将重点介绍核心函数和算法: 1、第一个函数是 arm_status arm_cfft_radix4_init_f32(arm_c
[单片机]
精准一投:vivo Xplay6库里TVC正式发布
3月17日,vivo官方放出了NBA当红球星斯蒂芬·库里为vivo Xplay6拍摄的TVC。自去年vivo Xplay6问世以来,库里一直担当Xplay6系列代言人。在这支TVC里展示了库里手持vivo Xplay6,运用专业级双摄技术拍照,最后精准一投,干净利落的球技,更是令众多粉丝尖叫。   现今消费者对手机产品的需求不断增加,除了外观、品质及体验,也更加讲究品牌精神的表达及共鸣。此次,vivo邀请库里作为新品代言人,其年轻、时尚、活力的风格与vivo的品牌契合度一致。作为NBA最好的三分球手,库里的投篮秘籍并不复杂。就是更专注地训练,采用更科学的投篮方式。正是由于他一直以来奉行的专注精神,专注成为更好的自己,让自己的每
[手机便携]
DDR4今年年底抵达PC 
        DDR4作为DDR3 DRAM的继承者,Micron本周一宣布明年将有望和大家见面,被应用在普通PC上。 据澳大利亚的Techworld报道,公司已经为发售初始版本的内存DDR4做好准备。DDR3作为目前主流电脑的不二选择,相比较即将来临的DDR4已经明显在功耗和性能上落后,新的DDR4有望工作在更低的电压下,相比较和1.5V DDR3只需要1.2V,并且总线速度将定位在2133MHz,无论在读写性能和刷新频率上都明显强于前任。     制定内存标准的电子设备工程联合协会(JEDEC)下个月将推出DDR4的详细规格说明,Micron将在今年年底的时候开始评量生产。
[手机便携]
4K电视时代来临 2013年出货量估增9倍
    随着4KUHD显示器逐渐崭露头角,台湾邻近的几个国家如韩国、日本分别在2012年与2014年开始以地面波与卫星等实验性的方式放送4K高画质节目,“4K电视的时代”可说即将来临。   根据光电协进会(PIDA)的统计显示,虽然目前4K电视的市场尚未完全打开,全球4K电视在2012年出货量也只有6万台左右,但是随着各家电视大厂全力支持,2013年出货开始小幅增加,预估全球4K电视出货约64万台,年成长率超过900%。   目前在高阶市场上之3C消费性显示产品,有逐渐朝向支持高分辨率的面板之趋势。日本面板大厂2013年10月初于日本CEATEC2013展出一系列高画质产品,夏普4K高分辨率电视面板之外,Panasonic
[家用电子]
S3C6410(Real6410) Linux 6x6矩阵键盘驱动移植
Real6410默认的键盘驱动是gpio键盘驱动,现在要取消gpio键盘,实现矩阵键盘。6410的矩阵键盘驱动对应的是samsung-keypad.c,位于driver/input/keyboard目录,可按照下面步骤进行移植。 1、 在arch/arm/mach-s3c64xx/mach-real6410.c中签加 添加头文件: #include plat/keypad.h 添加struct定义 static uint32_t smdk6410_keymap __initdata = { /* KEY(row, col, keycode) */ /*S00(0,0), S01(0,1),
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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