zoukankan      html  css  js  c++  java
  • 基于讯为4412开发板的Android开发流程

    讯为4412开发板  使用三星2410芯片,基于arm9架构,由于自己电脑硬件的局限,只能跑Android4.0.3系统。

    1、Uboot这个直接使用官方镜像烧写就可以了,一般情况不用去重复烧写。

      略。

      烧写命令:fastboot.exe flash bootloader u-boot-iTOP-4412.bin

    2、linux Kernel

      1)设备驱动

        --字符设备驱动

        --杂项设备驱动

        --I2C设备驱动(两种模式

          a,linux内部i2c体系

            包括两部分:i2c设备驱动与i2c总线驱动,总线驱动在kernel里已经存在了,设备驱动请自己写。

            在这里不得不吐槽一下4412开发板,虽然有7个i2c接口,但是只有两个外接!i2c6与i2c7,i2c7外挂的是触摸驱动,应该不能继续外挂其他设备了,因为i2c总线同一时间只能响应一个设备,所以能用的只有i2c6,可惜我使劲了好久,依旧不能request到总线,一直总线忙,return-110 。

          b,使用gpio模拟i2c时序

            模拟i2c需要注意芯片的i2c时序,否则会得不到ack!!这种方法可以使用杂项设备进行注册,驱动和杂项设备驱动类似。

      2)注册到kernel中(平台文件:arch/arm/mach-exynos/mach-itop4412.c

        --字符类设备

           首先声明设备信息,注意里面的.name变量,这个name变量需要和驱动里的.name相同,这样才能顺利进入probe函数中。

    struct platform_device s3c_device_XXX ={
            .name   = "match-name",
            .id             = -1,
    };

          然后在platform_device *smdk4x12_devices[] __initdata函数中注册,这样一个字符类设备就注册成功了。

    &s3c_device_XXX,

          补上设备驱动里需要的匹配信息

    struct platform_driver XXX_driver = {
        .probe = XXX_probe,
        .remove = XXX_remove,
        .shutdown = XXX_shutdown,
        .suspend  = XXX_suspend,
        .resume = XXX_resume,
        .driver = {
            .name = match-name,  //这个.name就是需要匹配的项
            .owner = THIS_MODULE,
        }
    };

        --i2c驱动

          首先需要确定没有其他驱动占用该i2c总线,以i2c7为例:

    static struct i2c_board_info i2c_devs7[] __initdata = {
    
    #ifdef CONFIG_TOUCHSCREEN_TSC2007
        {
            I2C_BOARD_INFO("tsc2007", 0x48),    //匹配项,从设备地址(读写addr>>1)
            .type        = "tsc2007",
            .platform_data    = &tsc2007_info,
            .irq = IRQ_EINT(0),
        },
    #endif
    
    };

          平台文件已经在init函数里注册好了,所以就只要添加自己的设备名就ok了。

      3)编译

        a,编译进kernel

          打开驱动所在目录下的Makefile和Kconfig文件,以leds点灯为例

          --Makfile

          在最后添加obj-$(CONFIG_LEDS_CTL)        += itop4412_leds.o,生成itop4412_leds.o文件。

          --Kconfig

          在最后添加如下信息:

    config LEDS_CTL
            bool "Enable LEDS config"
            default y
            help
              Enable LEDS config

        b,以模块编译

          Makefile文件如上。

          Kconfig文件更改如下:

    config LEDS_CTL
            tristate "Enable LEDS config"
            default y
            help
              Enable LEDS config

        配置信息编写完毕,在Ubuntu里使用make menuconfig命令进入内核配置

        选中Enable LEDS config选项,则CONFIG_LEDS_CTL=1,否则为0.

        同时平台文件中的配置如下:

        --编译进内核

    #ifdef CONFIG_LEDS_CTL
    struct platform_device s3c_device_leds_ctl = {
            .name   = "leds",
            .id             = -1,
    };
    #endif

        --以模块编译

    #if defined(CONFIG_LEDS_CTL) || defined(CONFIG_LEDS_CTL_MODULE)
    struct platform_device s3c_device_leds_ctl = {
            .name   = "leds",
            .id             = -1,
    };
    #endif

        注意这两个还是有一点区别的。

      3)更改linux启动图片

        使用image2Lcd软件把一个bmp图片转换成一个数组

        更改drivers/video/samsung/ iTop-4412.h文件中的第二个数组内容,ok!

        如果只要显示文字,那么图片的背景请设置为黑色:#ffffff

      最后执行make命令就ok了。

      会生成一个zImage文件:arch/arm/boot/zImage

      烧写命令:fastboot.exe flash kernel zImage

     3、Android系统编译

        1)访问设备节点的权限

          打开device/samsung/smdk4x12/conf/init.smdk4x12.rc

          在最后增加chmod 0777 xxx,保存退出。

          注意!!这个文件最后会打包到ramdisk_uboot.img中,所以在烧写system的时候需要同时烧写,否则更改失败。

        2)APP开机自启

          打开device/samsung/smdk4x12/device.mk,以leds为例

    #Install LedTest
    PRODUCT_COPY_FILES += 
            device/samsung/smdk4x12/apk/topeet/ledtest/ledtest.apk:system/app/ledtest.apk
    PRODUCT_COPY_FILES += 
            device/samsung/smdk4x12/apk/topeet/ledtest/libled.so:system/lib/libled.so

          注释:注意路径问题,并且把文件下载到相应的目录下,即.apk与.so文件都位于device/samsung/smdk4x12/apk/topeet/ledtest目录下。

        3)更改android启动时显示的logo

          这里我就有点取巧啦,直接更改图片资源:frameworks/base/core/res/assets/images

          该目录下有两个文件,android-logo-mask.png这个就是android的启动时显示的图片。

      使用./build_android.sh命令编译Android

      最后会生成system镜像:位于out/target/product/smdk4x12目录下的system.img与ramdisk_uboot.img文件。

      烧写命令:fastboot.exe flash system system.img / fastboot.exe flash ramdisk ramdisk-uboot.img

    最后重启:fastboot reboot

    ---------------------------------------------<完>-------------------------------------------------

  • 相关阅读:
    Android_listview设置每条信息的间距
    Android实现ListView或GridView首行/尾行距离屏幕边缘距离
    实现类似微信的延迟加载的Fragment——LazyFragment
    struts2的Action该方法不能去
    (工具)source insight高速增加时间代码
    猫学习IOS(十五)UI以前的热的打砖块游戏
    java语言内部类和匿名内部类
    JVM截至多少线程可以创建: unable to create new native thread
    linux下一个Oracle11g RAC建立(八)
    转基因小麦--主题在农业科技的最前沿
  • 原文地址:https://www.cnblogs.com/pngcui/p/5398379.html
Copyright © 2011-2022 走看看