zoukankan      html  css  js  c++  java
  • mini2440移植所有驱动到3.4.2内核详细解说

    //移植dm9000网卡驱动到linux-3.4.2内核

    //试验mini2440机器ID
    set machid 7CF
    boot
    ifconfig eth0 192.168.31.203
    mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
    ls /mnt
    //测试挂载成功

    移植dm9000到linux-3.4.2
    修改mach-smdk2440.c(位于arch/arm/mach-s3c24xx/mach-smdk2440.c)
    (使它也支持内核自带的DM9000网卡驱动)
    1)添加头文件

    #include <linux/dm9000.h> 


    2)添加全局变量:

    #define MACH_SMDK2440_DM9K_BASE (S3C2410_CS4 + 0x300)
    static struct resource smdk2440_dm9k_resource[] = {
    [0] = {
    .start = MACH_SMDK2440_DM9K_BASE,
    .end = MACH_SMDK2440_DM9K_BASE + 3,
    .flags = IORESOURCE_MEM
    },
    [1] = {
    .start = MACH_SMDK2440_DM9K_BASE + 4,
    .end = MACH_SMDK2440_DM9K_BASE + 7,
    .flags = IORESOURCE_MEM
    },
    [2] = {
    .start = IRQ_EINT7,
    .end = IRQ_EINT7,
    .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
    }
    };
    /*
    * The DM9000 has no eeprom, and it's MAC address is set by
    * the bootloader before starting the kernel.
    */
    static struct dm9000_plat_data SMDK2440_dm9k_pdata = {
    .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
    };
    
    static struct platform_device smdk2440_device_eth = {
    .name = "dm9000",
    .id = -1,
    .num_resources = ARRAY_SIZE(smdk2440_dm9k_resource),
    .resource = smdk2440_dm9k_resource,
    .dev = {
    .platform_data = &SMDK2440_dm9k_pdata,
    },
    };



    3)在smdk2440_devices[]数组下添加:

    static struct platform_device *smdk2440_devices[] __initdata = {
    &s3c_device_ohci,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c0,
    &s3c_device_iis,
    &smdk2440_device_eth, //添加该句
    };


    然后编译烧写
    cd /work/system/linux-3.4.2
    make uImage
    cp arch/arm/boot/uImage /work/nfs_root/uImage_net
    开发板上操作
    nfs 32000000 192.168.31.202:/work/nfs_root/uImage_net
    set machid 16a //设置机器码
    bootm 32000000

    ifconfig eth0 192.168.31.203
    mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
    ls /mnt


    //新建drivers_and_test_new目录
    cd /work/
    mkdir drivers_and_test_new
    cd drivers_and_test_new/
    mkdir 17th_dm9000c
    把D:workS3C2440MINI2440drivers_and_test_new 复制到/work/drivers_and_test_new/
    cd /work/drivers_and_test_new/17th_dm9000c
    make
    cp dm9dev9000c.c /work/system/linux-3.4.2/drivers/net/ethernet/davicom/
    cd /work/system/linux-3.4.2/drivers/net/ethernet/davicom/
    vi Makefile

    obj-$(CONFIG_DM9000) += dm9000.o

    改为

    #obj-$(CONFIG_DM9000) += dm9000.o
    obj-$(CONFIG_DM9000) += dm9dev9000c.o

    //编译内核
    cd /work/system/linux-3.4.2
    make uImage
    cp arch/arm/boot/uImage /work/nfs_root/uImage_net_new

    开发板上操作
    //设置可以用nfs启动挂载根文件系统
    set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.31.202:/work/nfs_root/fs_mini_mdev_new ip=192.168.31.203:192.168.31.202:192.168.31.1:255.255.255.0::eth0:off
    //说明:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
    // ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
    save
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_net_new
    bootm 30000000
    //在根文件系统上操作
    ifconfig eth0 192.168.31.203
    ifconfig
    ping 192.168.31.202
    mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
    ls /mnt


    //移植网卡驱动完成,下面移植led和按键驱动
    //移植first_drv
    cd /work/drivers_and_test_new/first_drv
    make
    cp first_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o firstdrvtest firstdrvtest.c
    cp firstdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod first_drv.ko
    lsmod
    ls /dev/xyz -l
    cat /proc/devices //查询设备节点
    ./firstdrvtest on //led开
    ./firstdrvtest off //led关


    //移植second_drv
    cd /work/drivers_and_test_new/second_drv
    make
    cp second_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o seconddrvtest seconddrvtest.c
    cp seconddrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod second_drv.ko
    ./seconddrvtest
    //按下按键查看结果

    //移植third_drv
    cd /work/drivers_and_test_new/third_drv
    make
    cp third_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o thirddrvtest thirddrvtest.c
    cp thirddrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    mkdir /lib/modules/3.4.2
    rmmod first_drv
    rmmod second_drv
    insmod third_drv.ko
    ./thirddrvtest &
    cat /proc/interrupts //查询中断号
    ps
    kill -9 962
    rmmod third_drv


    //移植forth_drv
    cd /work/drivers_and_test_new/forth_drv
    make
    cp forth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o forthdrvtest forthdrvtest.c
    cp forthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod forth_drv.ko
    ./forthdrvtest &
    //按下按键查看测试结果


    //移植fifth_drv
    cd /work/drivers_and_test_new/fifth_drv
    make
    cp fifth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o fifthdrvtest fifthdrvtest.c
    cp fifthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod fifth_drv.ko
    ./fifthdrvtest &
    //按下按键查看测试结果
    cat /proc/interrupts //查询中断号


    //移植sixth_drv
    cd /work/drivers_and_test_new/sixth_drv
    make
    cp sixth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o sixthdrvtest sixthdrvtest.c
    cp sixthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod sixth_drv.ko
    ./sixthdrvtest &
    //按下按键查看测试结果


    //移植7th_buttons_all
    cd /work/drivers_and_test_new/7th_buttons_all
    make
    cp button.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    arm-linux-gcc -o buttons_test buttons_test.c
    cp buttons_test /work/nfs_root/fs_mini_mdev_new //复制测试程序

    //开发板操作
    insmod buttons.ko
    ./buttons_test &
    //按下按键查看测试结果

    //移植10th_lcd
    cd /work/drivers_and_test_new/10th_lcd
    make
    cp lcd.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    //arm-linux-gcc -o buttons_test buttons_test.c
    //cp buttons_test /work/nfs_root/fs_mini_mdev_new //复制测试程序


    cd /work/system/linux-3.4.2
    make menuconfig //配置内核

    │ Location: │
    │ -> Device Drivers │
    │ -> Graphics support │
    │ -> Support for frame buffer devices (FB [=y]) 
    <M> S3C2410 LCD framebuffer support //设为模块化
    <M> Silicon Motion SM501 framebuffer support //设为模块化

    make uImage
    make modules
    cp arch/arm/boot/uImage /work/nfs_root/uImage_nolcd

    //复制测试程序
    cd /work/drivers_and_test_new/fb_test
    make clean
    make
    cp fb_test /work/nfs_root/fs_mini_mdev_new


    //复制驱动库
    cd /work/system/linux-3.4.2/drivers/video
    cp cfb*ko /work/nfs_root/fs_mini_mdev_new

    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
    bootm 30000000
    insmod cfbcopyarea.ko
    insmod cfbimgblt.ko
    insmod cfbfillrect.ko
    insmod lcd.ko
    ./fb_test /dev/fb0
    echo hello > /dev/tty1

    //移植8th_buttons_input
    cd /work/drivers_and_test_new/8th_buttons_input
    make
    cp buttons.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


    //修改inittab文件
    cd /work/nfs_root/fs_mini_mdev_new
    vi /etc/inittab
    增加一行:
    tty1::askfirst:-/bin/sh

    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
    bootm 30000000
    insmod cfbcopyarea.ko
    insmod cfbimgblt.ko
    insmod cfbfillrect.ko
    insmod lcd.ko
    insmod buttons.ko
    //按下按键查看测试结果

    //移植11th_ts
    修改内核文件:
    sudo chmod +w /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
    sudo vi /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h

    #define EV_VERSION 0x010000

    改为

    #define EV_VERSION    0x010001

    cd /work/drivers_and_test_new/11th_ts
    make clean
    make
    cp s3c_ts.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
    //编译tslib
    tar xzf tslib-1.4.tar.gz
    cd /work/drivers_and_test_new/11th_ts/tslib
    ./autogen.sh //自动生成
    mkdir tmp
    echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
    ./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
    make clean
    make
    make install
    cd tmp
    cp * -rf /work/nfs_root/fs_mini_mdev_new


    修改vi /work/nfs_root/fs_mini_mdev_new/etc/ts.conf第1行(去掉#号和第一个空格):

    # module_raw input

    改为:

    module_raw input


    //开发板上操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
    bootm 30000000
    insmod cfbcopyarea.ko
    insmod cfbimgblt.ko
    insmod cfbfillrect.ko
    insmod s3c_ts.ko
    insmod lcd.ko
    insmod buttons.ko


    export TSLIB_TSDEVICE=/dev/event0
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=/etc/ts.conf
    export TSLIB_PLUGINDIR=/lib/ts
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_FBDEVICE=/dev/fb0

    ts_calibrate //校准触摸屏
    ts_test //测试触摸屏

    //移植12th_usb
    cd /work/drivers_and_test_new/12th_usb
    make
    cp usbmouse_as_key.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

    //开发板操作
    ls /dev/event*
    insmod usbmouse_as_key.ko
    ls /dev/event*
    cat /dev/event2 //或者event0、event1
    //插上usb鼠标按左右中键测试

    //移植13th_ramblock
    cd /work/drivers_and_test_new/13th_ramblock
    make
    cp ramblock.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
    bootm 30000000
    insmod ramblock.ko
    mkdosfs /dev/ramblock //格式化整个分区
    mount -t vfat /dev/ramblock /mnt
    ls /mnt
    cd /mnt
    vi 1.txt
    cd /
    umount /mnt
    mount -t vfat /dev/ramblock /mnt
    cat /mnt/1.txt
    umount /mnt
    fdisk /dev/ramblock //开始建立分区
    m //查看帮助信息
    n //添加一个新分区
    p //添加主分区
    1 //第一个分区
    1 //第一个柱面号为1
    16 //第二个柱面号为16
    n //添加新分区
    p //添加主分区
    2 //第二个分区
    17 //第一个柱面号为17
    32 //第二个柱面号为32
    w //写入扇区并退出
    ls /dev/ramblock* //查看分区表

    //移植14th_nand
    cd /work/drivers_and_test_new/14th_nand
    make
    cp s3c_nand.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


    cd /work/system/linux-3.4.2
    make menuconfig //配置内核

    Location: │
    │ -> Device Drivers │
    │ -> Memory Technology Device (MTD) support (MTD [=y]) │
    │ -> NAND Device Support (MTD_NAND [=y]) 
    < >NAND Flash support for Samsung S3C SoCs //取消选中




    make uImage
    cp arch/arm/boot/uImage /work/nfs_root/uImage_nonand

    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
    bootm 30000000
    ls /dev/mtd*
    insmod s3c_nand.ko
    mount -t yaffs /dev/mtdblock3 /mnt //挂载root分区
    ls /mnt






    //移植15th_nor
    cd /work/drivers_and_test_new/15th_nor
    make
    cp s3c_nor.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
    bootm 30000000
    insmod s3c_nor.ko
    ls /dev/mtd*






    //移植16th_virt_net
    cd /work/drivers_and_test_new/16th_virt_net
    make
    cp virt_net.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

    //开发板操作
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
    bootm 30000000
    insmod virt_net.ko
    ifconfig vnet0 3.3.3.3
    ifconfig vnet0
    ping 3.3.3.3
    ping 3.3.3.4



    版权声明:本文为博主原创文章,转载请注明文章来源,有需要帮忙可加QQ:871263854
  • 相关阅读:
    ContentProvider简单介绍
    hdu 1087 Super Jumping! Jumping! Jumping!(dp 最长上升子序列和)
    点点文刊 -- 记录生活的色彩
    【struts2+hibernate4】小型电子商务站点
    IOS学习之蓝牙4.0
    POJ 1988 Cube Stacking (种类并查集)
    Android开发之 shape的使用
    妄想性仮想人格障害 新手教程 +改动器
    Spring 的 ApplicationEvent and ApplicationListener
    Offer是否具有法律效力?
  • 原文地址:https://www.cnblogs.com/Dream998/p/8744614.html
Copyright © 2011-2022 走看看