linux-2.6.33移植到FL2440

发布时间:2023-06-08  

宿主机:ubuntu10.04

目标机:fl2440
交叉编译器:arm-linux-gcc-3.4.1
交叉编译器路径:/usr/local/arm/3.4.1
要移植的内核版本:linux-2.6.33.19

<1>移植yaffs2驱动

yaffs下载地址:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi

tar zxvf yaffs2.tar.gz

cd yaffs2

./patch-ker.sh c /linux-2.6.33.19

<2>修改机器码

  1. s3c2410 ARCH_S3C2410 S3C2410 193    删掉

  1. s3c2440 ARCH_S3C2440 S3C2440 362

修改为

  1. s3c2440 ARCH_S3C2440 S3C2440 193

<3> 指定编译器

ARCH                ?= arm
CROSS_COMPILE        ?= arm-linux-

<4>增加devfs文件器支持

找到 menu "Pseudo filesystems"

大概在105行

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

<5>修改晶振频率

arch/arm/mach-s3c2440/mach-smdk2440.c

s3c24xx_init_clocks(12000000);

<6>修改MTD分区

arch/arm/plat-s3c24xx/common-smdk.c

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
            .name        = "boot",
            .size        = 0x00020000,
            .offset = 0
    },
    [1] = {
            .name        = "bootParam",
            .size        = 0x00060000,
            .offset = 0x00020000,
    },
    [2] = {
            .name        = "Kernel",
            .size        = 0x00300000,
            .offset = 0x00500000,
    },
    [3] = {
            .name        = "fs_yaffs",
            .size        = 0x03c00000,
            .offset = 0x00800000,
        },       
    [4] = {
            .name        = "eboot",
            .size        = 0x00080000,
            .offset = 0x04400000,
    },
    [5] = {
            .name        = "WINCE",
            .size        = 0x03b80000,
            .offset = 0x04480000,
    }
};

<7>关闭ECC校验

drivers/mtd/nand/s3c2410.c

  chip->ecc.mode = NAND_ECC_NONE;

<8>修改nandflash驱动,支持K9F1G08的nandflash
修改drivers/mtd/nand下面的nand_bbt.c文件:

static struct nand_bbt_descr largepage_memorybased = {
        .options = 0,
        .offs = 0,
        .len = 1,           // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash
        .pattern = scan_ff_pattern
};
static struct nand_bbt_descr largepage_flashbased = {
        .options = NAND_BBT_SCAN2NDPAGE,
        .offs = 0,
        .len = 1,           //原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash
        .pattern = scan_ff_pattern
};

<9>开始配置内核

make s3c2410_defconfig


去掉S3C2400 Machines、S3C2410 Machines、S3C2412 Machines、S3C2442 Machines的所有选项,否则会报错。如果现在编译内核,下载到开发板中,内核就可以正常启动了。呵呵,有了雏形,咱们继续移植设备驱动

<10>支持RTC

arch/arm/mach-s3c2440/mach-smdk2440.c

static struct platform_device *smdk2440_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c0,
        &s3c_device_iis,
        &s3c_device_rtc,
};

<11>移植UDA1341

arch/arm/mach-s3c2440/mach-smdk2440.c

添加头文件

#include
#include

添加代码

static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
        .l3_clk = S3C2410_GPB(4),
        .l3_data = S3C2410_GPB(3),
        .l3_mode = S3C2410_GPB(2),
        .model = UDA134X_UDA1341,
};

static struct platform_device s3c24xx_uda134x = {
        .name = "s3c24xx_uda134x",
        .dev = {
                .platform_data    = &s3c24xx_uda134x_data,
        }
};

把设备添加到平台当中

static struct platform_device *smdk2440_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c0,
        &s3c_device_iis,
        &s3c_device_rtc,
        &s3c24xx_uda134x,
};

<12>移植DM9000

修改 drivers/net/dm9000.c 文件

#include
#include
#include

在dm9000_probe 函数开始增加:

unsigned char ne_def_eth_mac_addr[]={0x00,0x12,0x34,0x56,0x80,0x49};
    static void *bwscon;
    static void *gpfcon;
    static void *extint0;
    static void *intmsk;
    #define BWSCON           (0x48000000)
    #define GPFCON           (0x56000050)
    #define EXTINT0           (0x56000088)
    #define INTMSK           (0x4A000008)
        bwscon=ioremap_nocache(BWSCON,0x0000004);
        gpfcon=ioremap_nocache(GPFCON,0x0000004);
        extint0=ioremap_nocache(EXTINT0,0x0000004);
        intmsk=ioremap_nocache(INTMSK,0x0000004);
        writel(readl(bwscon)|0xc0000,bwscon);
        writel( (readl(gpfcon) & ~(0x3 << 14)) | (0x2 << 14), gpfcon);
        writel( readl(gpfcon) | (0x1 << 7), gpfcon); // Disable pull-up
        writel( (readl(extint0) & ~(0xf << 28)) | (0x4 << 28), extint0); //rising edge
        writel( (readl(intmsk))  & ~0x80, intmsk);  

在这个函数的最后需要修改:

if (!is_valid_ether_addr(ndev->dev_addr)) {
                mac_src = "chip";
                for (i = 0; i < 6; i++)
                        //ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
                        ndev->dev_addr[i] = ne_def_eth_mac_addr[i];
        }

2. 修改arch/arm/mach-s3c2440/mach-smdk2440.c,添加设备

static struct platform_device *smdk2440_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c0,
        &s3c_device_iis,

         &s3c_device_rtc,
        &s3c24xx_uda134x,
        &s3c_device_dm9000,
};

3. 修改 arch/arm/plat-s3c24xx/devs.c

#include

static struct resource s3c_dm9000_resource[] = {
        [0] = {
        .start = S3C24XX_PA_DM9000,
        .end   = S3C24XX_PA_DM9000+ 0x3,
        .flags = IORESOURCE_MEM
        },
        [1]={
        .start = S3C24XX_PA_DM9000 + 0x4, //CMD pin is A2
        .end = S3C24XX_PA_DM9000 + 0x4 + 0x7c,
        .flags = IORESOURCE_MEM
        },
        [2] = {
        .start = IRQ_EINT7,
        .end   = IRQ_EINT7,
        .flags = IORESOURCE_IRQ
        },
        };

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    以下几点: 1.Windows版本的 VMWare workstation pro 2.Linux发行版 ubuntu 1604(友善之臂官方使用fedora 9) 3.编辑器vim 4.Linux版本......
    主要的原因是minicom使用的时缺出现乱码,也不知道是怎么回事,折腾了一会儿之后,没办法,就换成了C-kermit,经过实验,它确实是一个强大的软件.   C-kermit具体的安装方法此处不再介绍,可以在命令行$sudo......
    想折腾mcu8051ide的,但是apt-get安装和手动一个个安装依赖库再编译主程序安装两种方式的都运行闪退,只能用原始的方法了。 需要的软件: 1. 编辑器: 随便 vim emacs gedit......
    .配置静态ip: 前提步骤:使用vmware的虚拟网络编辑器将虚拟网卡的dhcp关闭,并设置子网地址和网关。 在主机的网路共享中心,根据虚拟网路编辑器里的信息更改 vmnet8 的属性,配置ip 和网......
    Insight具有针对C/C++、 C#、 Java、Objective-C等语言的动态分析功能。 3.Vim Vim是从 vi 发展出来的一个文本编辑器,它是一个高度可配置的文本编辑器工具,旨在......
    要让虚拟机和开发板建立网络连接,因为我的虚拟机是通过vmnet8来net的方式连接外网,所以我选择让vmnet0桥接到usb网卡上来连接开发板。 以管理员身份运行虚拟网络编辑器,配置vmnet0如下:    然后......
    ubuntu下arm-linux-gcc安装;我下载的地址随便找的,4.4.3版本的,地址:http://www.cr173.com/soft/42654.html#address 1.我放......
    来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下上一步中的安装路径,使用命令:vim /etc/profile 编辑profile文件,添加......
    一网段,何为同一网段?简单说就是ip地址的前几位一样,最后一位不同,比如192.168.1.180和192.168.1.x 就是同一网段。 打开VMware编辑菜单-->虚拟网络编辑器 更改......
    系统,接上即可自动安装驱动。 $ lsmod | grep pl2303 或者  $ lsmod | grep usbserial   可以看到设备如下   安装minicom $ sudo......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>