精华内容
下载资源
问答
  • JZ2440

    2018-02-26 13:52:47
    工作上玩过了全志A20,瑞芯微RK3288后,愈发觉得这些芯片很多地方玩不转,原因很简单因为对... 那么首先先搭建一个开发环境,这里买了韦东山开发的jz2440,主要是还是因为资料给的比较多吧,看到后面还有卖一些视...
    工作上玩过了全志A20,瑞芯微RK3288后,愈发觉得这些芯片很多地方玩不转,原因很简单因为对硬件不够熟悉,加上安卓框架过于庞大。
         为了弥补这个缺陷,加上2440在网上资料比较多,更容易快速系统的学习。所有有了这个开篇,当然在接下去的一段时间内,玩的都会是uboot.

         那么首先先搭建一个开发环境,这里买了韦东山开发的jz2440,主要是还是因为资料给的比较多吧,看到后面还有卖一些视频的。 经过两个平台的开发,也知道了资料是最宝贵的,一头扎进代码里并没有什么卵用,只能靠运气。

         用作者给的虚拟机感觉太low了,这里就用ubuntu15.10吧。
         
         虚拟机一开始用vmware workstation12 结果共享这个功能使用用不了,wmtools这玩意一开始搞了半天装上了也不行,也不想搞别的服务这样折腾了。
        干脆放弃这个虚拟机,用之前一直很熟的VirtualBox,果不其然,一遍就搞定了。

         我的环境是win10,VirtualBox下装ubuntu15.10. 安卓虚拟机的教程可能太LOW了,网上一堆的,就不放上了丢人现眼了。     

         这里就讲一下ubuntu 打开 root用户, 输入命令
         sudo passwd root
         输入两次密码就ok了


         接下来直接把交叉编译工具装上来,中间有需要的工具就直接装上就好了。

         交叉编译器就直接用提供的 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 不折腾了。




         这里中间插入一下vbox的共享目录非常不爽,只有root才能操作,我们改一下权限,这样用起来也方便一点。
         virtualBox的共享目录是在/mnt 下,其他用户没有任何权限, 解决方法是把你自己加入到vboxsf组里面,这样不用每次开机改权限那么麻烦了。
         这里的共享目录命名规则是  sf_加上你的共享文件夹的名字,这里共享文件夹可以弄很多个,非常方便。不像smb那么麻烦,访问也不是很方便。
         drwxrwx---  1 root vboxsf    0  4月  4 12:40 sf_shared/
         sudo usermod -a -G vboxsf yourusernanme
         我的用户的命令就是
         sudo usermod -a -G vboxsf u 
         重启一下就可以了。

         
         开始安装交叉编译器,其实也就是解压一下,然后配置一下环境变量罢了。
         先弄一个工作目录,我放到 ~/jz2440 下,也就是/home/u/jz2440/



         cd /media/sf_shared
         tar -xvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2  -C /home/u/jz2440/

         接下来配置环境变量,我们只在我们当前这个用户增加这个配置
         vim ~/.bashrc
         最后加入一行
         PATH=$PATH:~/jz2440/gcc-3.4.5-glibc-2.3.6/bin/
         保存退出, 重新导入环境变量即可。
          source ~/.bashrc

         然后来验证一下是否正常
         u@111:~$ arm-linux-gcc -v
         bash: /home/u/jz2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc: 没有那个文件或目录
         这里发现arm-linux-gcc 路径是每次,可是他提示没有那个文件或目录,我猜测他引用了某些东西
         解决办法,因为我的ubuntu是64位的没有安装32位的库
         sudo apt-get install libc6:i386

         u@111:/$ arm-linux-gcc -v
    Reading specs from /home/u/jz2440/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/specs
    Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
    Thread model: posix
    gcc version 3.4.5



         下面编译uboot

         
         看一下接下来用的工具的目录
    u@111:~/jz2440$ tree -L 2
    .
    ├── gcc-3.4.5-glibc-2.3.6
    ├── linux
    │   ├── linux-2.6.22.6_jz2440.patch
    │   └── linux-2.6.22.6.tar.bz2
    └── uboot
        ├── u-boot-1.1.6_jz2440.patch
        └── u-boot-1.1.6.tar.bz2



         u@111:~/jz2440/uboot$ ls
         u-boot-1.1.6  u-boot-1.1.6_jz2440.patch  u-boot-1.1.6.tar.bz2

         tar -xvf u-boot-1.1.6.tar.bz2

         cd u-boot-1.1.6/

         patch -p1 < ../u-boot-1.1.6_jz2440.patch
         
         make 100ask24x0_config

         make
         
    这样就得到了uboot.bin

     u@111:~/jz2440/uboot/u-boot-1.1.6$ ll u-boot.bin
    -rwxrwxr-x 1 u u 198316  4月  4 13:42 u-boot.bin*
         

    再接编译内核

         tar -xvf linux-2.6.22.6.tar.bz
         cd linux-2.6.22.6/
         patch  -p1 < ../linux-2.6.22.6_jz2440.patch
         cp config_ok .config
         make uImage  【这里用多线程并发编译可以加快速度 参数 -jN 我使用8】


    又一次出现了幺蛾子:
         Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
    /home/u/jz2440/linux/linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
    /home/u/jz2440/linux/linux-2.6.22.6/Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
    make[1]: *** No rule to make target 'silentoldconfig'。 停止。
      CHK     include/linux/version.h
      UPD     include/linux/version.h
    make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'。 停止。

    解决办法:
          由于我的系统的make工具太新,make的旧版规则已经无法兼容新版。
             修改前:416行 config %config: scripts_basic outputmakefile FORCE
             修改后:416 行 %config: scripts_basic outputmakefile FORCE
          
             修改前:1449 行 / %/: prepare scripts FORCE
             修改后:1449 行 %/: prepare scripts FORCE


         重新来一次,发现可以了
         make -j8 uImage

      OBJCOPY arch/arm/boot/Image
      Kernel: arch/arm/boot/Image is ready
      AS      arch/arm/boot/compressed/head.o
      GZIP    arch/arm/boot/compressed/piggy.gz
      CC      arch/arm/boot/compressed/misc.o
      AS      arch/arm/boot/compressed/piggy.o
      LD      arch/arm/boot/compressed/vmlinux
      OBJCOPY arch/arm/boot/zImage
      Kernel: arch/arm/boot/zImage is ready
      UIMAGE  arch/arm/boot/uImage
    "mkimage" command not found - U-Boot images will not be built
      Image arch/arm/boot/uImage is ready

       这里似乎又出现了一个问题,找不到u-boot,看提示就看出来打包uImage失败了。
       发现这个目录下:  ~/jz2440/linux/linux-2.6.22.6/arch/arm/boot
        只有Image 和zImage 没有uImage
        猜测一下原来uImage 应该就是带uboot的镜像把,那么我们看看这个目录下有什么文件:
         drwxrwxr-x  4 u u    4096  4月  4 14:11 ./
    drwxrwxr-x 52 u u    4096  8月 31  2007 ../
    drwxrwxr-x  2 u u    4096  8月 31  2007 bootp/
    drwxrwxr-x  2 u u    4096  4月  4 13:59 compressed/
    -rw-rw-r--  1 u u      40  8月 31  2007 .gitignore
    -rwxrwxr-x  1 u u 3749512  4月  4 13:59 Image*
    -rw-rw-r--  1 u u     108  4月  4 13:59 .Image.cmd
    -rw-rw-r--  1 u u    1326  8月 31  2007 install.sh
    -rw-rw-r--  1 u u    2549  8月 31  2007 Makefile
    -rw-rw-r--  1 u u     220  4月  4 14:06 .uImage.cmd
    -rwxrwxr-x  1 u u 1848680  4月  4 13:59 zImage*
    -rw-rw-r--  1 u u     135  4月  4 13:59 .zImage.cmd

    这文件的名字似乎很像是我们关心的东西,就看看写了什么吧?
    cat .uImage.cmd

    cmd_arch/arm/boot/uImage := /bin/bash /home/u/jz2440/linux/linux-2.6.22.6/scripts/mkuboot.sh -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n 'Linux-2.6.22.6' -d arch/arm/boot/zImage arch/arm/boot/uImage


    这里能看到一个mkuboot.sh脚本和uboot有关

    #!/bin/bash

    #
    # Build U-Boot image when `mkimage' tool is available.
    #

    MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage")

    if [ -z "${MKIMAGE}" ]; then
            MKIMAGE=$(type -path mkimage)
            if [ -z "${MKIMAGE}" ]; then               
                    # Doesn't exist
                    echo '"mkimage" command not found - U-Boot images will not be built' >&2
                    exit 0;
            fi
    fi



    这里看懂了就是找一个mkimage工具的路径,我在uboot目录找到了这个工具
    ~/jz2440/uboot/u-boot-1.1.6/tools/mkimage

    感觉这样改脚本也是比较麻烦的直接用安装一下这个工具就好了
    sudo apt-get install uboot-mkimage
    现在没有可用的软件包 uboot-mkimage,但是它被其它的软件包引用了。
    这可能意味着这个缺失的软件包可能已被废弃,
    或者只能在其他发布源中找到
    可是下列软件包取代了它:
      u-boot-tools:i386 u-boot-tools

    E: 软件包 uboot-mkimage 没有可供安装的候选者

    那么就安装这两个好了:

    sudo apt-get install   u-boot-tools:i386 u-boot-tools


    重新make

      Kernel: arch/arm/boot/Image is ready
      Kernel: arch/arm/boot/zImage is ready
      UIMAGE  arch/arm/boot/uImage
    Image Name:   Linux-2.6.22.6
    Created:      Mon Apr  4 14:27:06 2016
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    1848680 Bytes = 1805.35 kB = 1.76 MB
    Load Address: 30008000
    Entry Point:  30008000
     Image arch/arm/boot/uImage is ready
     

    总算是可以了!!!!!

    本来以为直接解压就可以完成的工作,硬是出现了好多幺蛾子,其实这些错误并没有什么,只要观察错误提示信息,加上百度和一定耐心就可以解决!


    ps:看到资料中给出4.3寸屏,需要替换一个文件!

    突然发现还有屏幕参数需要改对比了一下两个问题差别,多了一个480x272的配置项目,那是怎么选择的呢?以后再说吧!

    /* 480x272 */
    static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {
    static struct s3c2410fb_mach_info smdk2440_lcd_cfg_320x240 __initdata = {

    原来的:
    static struct s3c2410fb_mach_info smdk2440_lcd_cfg_320x240 __initdata = {


    u@111:~/jz2440/linux/linux-2.6.22.6/arch/arm/mach-s3c2440$ cp /media/sf_shared/4.3寸LCD_mach-smdk2440.c mach-smdk2440.c
    展开全文
  • yaffs2 jz2440

    2020-01-11 17:48:36
    jz2440制作根文件系统时,yaffs2 make生成的工具不能使用,需要修改源码,jz2440使用的工具。
  • jz2440驱动

    2019-02-23 19:07:00
    jz2440有关的驱动和芯片手册,包括USB转串口驱动,DNW驱动
  • jz2440 linux2.6

    2020-12-24 09:26:53
    卫东山 jz2440 V3,有源码,有补丁,还有打好补丁的源码 解压源码后,进入目录下打补丁: patch -p1 < ../system/linux-2.6.22.6_jz2440_v2v3.patch cp config_ok ./config make uImage 生成内核镜像
  • JZ2440 S3C2440裸机程序

    2018-06-05 15:04:39
    JZ2440 S3C2440裸机程序 这是一个关于JZ2440的裸机代码 其中包含adc_ts,gpio,i2c,int,key,led,lcd,link,mmu,nand,timer,uart...
  • JZ2440串口操作

    2018-11-09 14:46:39
    这个代码支持JZ2440开发板的串口操作,实验过,可以用
  • 这里是jz2440-v3开发板原理图及S3C2440芯片手册,是购买JZ2440开发板的时候带的,这里上传文件,主要是希望配合我的jz2440裸板操作文章,另外赚点积分
  • 移植u-boot 2015.01到JZ2440上将分为很多篇幅来写,由于JZ2440相对比IMX8简单很多,更适合用来学习uboot 本系列主要思路如下: 1. 移植uboot-2015.01到JZ2440板子上并正常运行起来,解决过程中的bugs 2. 一步一步...

    移植u-boot 2015.01到JZ2440上将分为很多篇幅来写,由于JZ2440相对比IMX8简单很多,更适合用来学习uboot

    本系列主要思路如下:

    1. 移植uboot-2015.01到JZ2440板子上并正常运行起来,解决过程中的bugs

    2. 一步一步分析uboot源码,优化uboot过程

    u-boot 2015中并没有提供JZ2440的定制代码,我们需要将最接近的smdk2410的板子信息移植过来

    >>>>>移植UBOOT到ARM板子上的一般步骤

    1. 创建ARM板文件

            在board/samsung/文件下创建jz2440文件夹

            将board/samsung/smdk2410下的所有文件复制到board/samsung/jz2440下

            将board/samsung/jz2440下的smdk2410.c重命名为jz2440.c

            修改jz2440.c(在整个文件中只有一处2410的设置,如下):

                       将 gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;改为:

                       gd->bd->bi_arch_number = MACH_TYPE_JZ2440;

    修改writel(0x000007FF, &gpio->gphup);为writel(0x000007F3, &gpio->gphup);设置串口上拉

           在arch/arm/include/asm/mach-types.h增加对MACH_TYPE_JZ2440的定义

                      #define MACH_TYPE_JZ2440               194

           同时增加machine ARCH的定义:

                            #ifdef CONFIG_ARCH_JZ2440

                                  # ifdef machine_arch_type

                                  #  undef machine_arch_type

                                  #  define machine_arch_type    __machine_arch_type

                                  # else

                                  #  define machine_arch_type    MACH_TYPE_JZ2440

                                  # endif

                          # define machine_is_jz2440()    (machine_arch_type == MACH_TYPE_JZ2440)

                          #else

                                 # define machine_is_jz2440()    (0)

                         #endif

    2. 创建ARM板的Kconfig文件

             修改board/samsung/jz2440下Kconfig文件如下:

             if TARGET_JZ2440

             config SYS_BOARD                       //在编译时用来识别ARM板子所在board/厂商文件夹下板子文件夹的名字

                   default "jz2440"

             config SYS_VENDOR                   //在编译时用来识别ARM板子所在board下的厂商文件夹

                   default "samsung"

             config SYS_SOC

                   default "s3c24x0"

             config SYS_CONFIG_NAME        //用来识别ARM板子的头文件名字include/configs/SYS_CONFIG_NAME.h

                  default "jz2440"

             endif

    3. 创建ARM板子的Makefile

              修改board/samsung/jz2440下Makefile文件如下:

              将obj-y    := smdk2410.o修改为obj-y    := jz2440.o

    4. 创建ARM板子的defconfig文件

              复制configs/smdk2410_defconfig到configs/jz2440_defconfig

              修改configs/jz2440_defconfig中的 CONFIG_TARGET_SMDK2410=y为CONFIG_TARGET_JZ2440=y       

    5. 创建ARM板子的头文件

             复制include/configs/smdk2410.h到include/configs/jz2440.h

             修改include/configs/jz2440.h:

                    将文件中所有的S3C2410和SMDK2410全部替换为JZ2440

    6. 将ARM板子的Kconfig文件加入到ARM架构的Kconfig中

             在arch/arm/Kconfig中增加:source "board/samsung/jz2440/Kconfig"

    7. 创建ARM板子的config到系统的Kconfig中

             在arch/arm/Kconfig中增加:

                        config TARGET_JZ2440

                               bool "Support jz2440"

                               select CPU_ARM920T

    >>>>>修复移植过程中的问题:

    1. 修改start.S文件

    删除老的时钟配置:

    /* FCLK:HCLK:PCLK = 1:2:4 */

        /* default FCLK is 120 MHz ! */

        ldr r0, =CLKDIVN

        mov r1, #3

        str r1, [r0]

    增加新的时钟配置:

    /* FCLK:HCLK:PCLK = 1:4:8 */

        /* default FCLK is 400 MHz ! */

        ldr r0, =CLKDIVN

        mov r1, #5      /* FCLK:HCLK:PCLK = 1:4:8 */

        str r1, [r0]

     

        /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */

        mrc p15, 0, r1, c1, c0, 0       /* 读出控制寄存器 */

        orr r1, r1, #0xc0000000         /* 设置为“asynchronous bus mode” */

        mcr p15, 0, r1, c1, c0, 0       /* 写入控制寄存器 */

    2. 修改board/samsung/jz2440/jz2440.c

    #elif FCLK_SPEED==1     /* Fout = 202.8MHz */

    #define M_MDIV  0x5C

    #define M_PDIV  0x1

    #define M_SDIV  0x1

    #endif

    将M_MDIV的值从0xA1改为0x5C,M_PDIV从0x3改为0x1

    将writel(0x000007FF, &gpio->gphup);改为writel(0x000007F3, &gpio->gphup);

    3. 复制drivers/mtd/nand/s3c2410_nand.c到drivers/mtd/nand/jz2440_nand.c:

         将jz2440_nand.c中的所有S3C2410替换为JZ2440

         在drivers/mtd/nand/Makefile中增加obj-$(CONFIG_NAND_JZ2440) += jz2440_nand.o

    4. 修改drivers/serial/serial_s3c24x0.c:

         删除uart fifo的配置:writel(0x07, &uart->ufcon); writel(0x0, &uart->umcon);

         修改writel(0x245, &uart->ucon);为writel(0x5, &uart->ucon);

    >>>>>编译烧写uboot:

    1. 配置交叉编译地址  export CROSS_COMPILE=xxx/arm-linux-

    2. 配置ARM架构         export ARCH=arm

    3. make jz2440_defconfig

    4. make

    5. oflash u-boot.bin

    注意此时u-boot.bin只支持NOR启动,烧写到Nor Flash中即可启动板子

    展开全文
  • JZ2440串口

    2015-11-08 15:07:11
    JZ2440的串口驱动,串口号位0,波特率115200,中断方式工作,中断向量表函数调用实现。
  • JZ2440使用手册

    2016-07-02 08:55:17
    JZ2440使用手册 韦东山
  • JZ2440实践笔记

    2018-01-27 15:30:37
    JZ2440实践笔记,介绍了学习过程中遇到的问题,及其解决办法
  • 近来无事就想着动手移植新的内核在JZ2440开发板上跑起来,https://www.kernel.org/ 下载kernel linux-4.15.6.tar.xd,执行xz -d linux-4.15.6.tar.xztar -xvf linux-4.15.6.tar进行解压操作,就可以进行移植操作了。...

    近来无事就想着动手移植新的内核在JZ2440开发板上跑起来,https://www.kernel.org/ 下载kernel linux-4.15.6.tar.xd,执行

    xz -d linux-4.15.6.tar.xz

    tar -xvf linux-4.15.6.tar

    进行解压操作,就可以进行移植操作了。

    1.修改Makefile文件:

    -ARCH           ?= $(SUBARCH)

    -CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)

    +ARCH           ?= arm

    +CROSS_COMPILE  ?= arm-linux-gnueabi-

    在3.4.2内核中交叉编译设置arm-linux-就可以编译,这里不知为何会出错,网上查找设置成arm-linux-gnueabi-就可以,我的arm-linux-gcc 的版本是4.3.2,arm-linux-gnueabi-gcc的版本是4.7.3。需要注意的是arm和arm-linux-gnueabi-之后不能添加任何的空格否则会出现莫名其妙的错误。

    复制arch/arm/config/s3c2410_defconfig文件到内核源码根目录

    2.修改晶振频率

    linux-4.15.6/arch/arm/mach-s3c24xx/mach-smdk2440.c 文件中

    static void __init smdk2440_init_time(void)

    {

    //s3c2440_init_clocks(16934400);

    s3c2440_init_clocks(12000000);

    samsung_timer_init();

    }

    修改时钟频率为12M,否则串口输出将为乱码

    3.修改mtd分区

    /linux-4.15.6/arch/arm/mach-s3c24xx/common-smdk.c文件中

    /* NAND parititon from 2.4.18-swl5 */

    static struct mtd_partition smdk_default_nand_part[] = {

    [0] = {

    .name   = "bootloader",

    .size   = SZ_256K,

    .offset = 0,

    },

    [1] = {

    .name   = "params",

    .offset = MTDPART_OFS_APPEND,

    .size   = SZ_128K,

    },

    [2] = {

    .name   = "kernel",

    .offset = MTDPART_OFS_APPEND,

    .size   = SZ_4M,

    },

    [3] = {

    .name   = "rootfs",

    .offset =  MTDPART_OFS_APPEND,

    .size   = MTDPART_SIZ_FULL,

    }

    };

    这个要跟uboot的mtdparts相对应,由于新的kernel比较大,原先的2M不够,故这里修改为4M。设置uboot变量用set 命令,后需要saveenv进行保存变量。

    uboot环境变量:

    baudrate=115200

    ethaddr=08:00:3e:26:0a:5b

    serverip=192.168.7.11

    netmask=255.255.255.0

    mtdids=nand0=nandflash0

    bootdelay=5

    ipaddr=172.16.91.161

    mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),4m(kernel),-(root)

    machid=16a //s3c2440对应的id

    filesize=1A7540

    bootcmd=nand read 0x30008000 0x80000 0x500000

    bootargs=init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2 rw mem=64M

    nand=read 30000000 kernel;bootm 30000000

    stdin=serial

    stdout=serial

    stderr=serial

    partition=nand0,0

    mtddevnum=0

    mtddevname=bootloader

    Environment size: 525/131068 bytes

    make s3c2410_defconfig配置生成.config文件,

    make uImage在arch/arm/boot/目录底下生成uImage镜像文件。

    4.分区设置好之后但是还是不能正常启动开发板,需要制作根文件系统。

    4.1

    下载busybox-1.20.0,make menuconfig

    Busybox Settings   ===>Build Options ====>Build Busybox as a static binary(no shared libs)编为静态库

    4.2

    修改Makefile 中的 ARCH 和 CROSS_COMPILE 为arm 和 arm-linux-

    直接进行make,之后进行安装,执行命令

    4.3

    make CONFIG_PREFIX=/home/username/rootfs

    安装到指定目录位置,这里装到roofs目录底下,将出现bin sbin usr 目录和linuxrc文件

    修改linuxrc文件权限chmod 777 linuxrc。

    4.4

    创建etc lib proc tmp dev home mnt root    sys等目录。

    在etc文件夹底下创建fstab、inittab、mdev.conf等文件,创建文件夹init.d,并在其目录底下创建rcS文件。

    inittab文件中的内容定义如下:

    ::sysinit:/etc/init.d/rcS

    console::askfirst:-/bin/sh

    ::ctrlaltdel:/sbin/reboot

    ::shutdown:/bin/umount -a -r

    fstab文件中的内容定义如下:

    #device   mount-point     type      option     dump   fsck   order

    proc        /proc     proc     defaults    0        0

    tmpfs       /tmp      tmpfs    defaults    0        0

    sysfs       /sys      sysfs    defaults    0        0

    tmpfs       /dev      tmpfs    defaults    0        0

    rcS文件中的内容定义如下:

    PATH=/sbin:/bin:/usr/sbin:/usr/bin

    runlevel=S

    prevlevel=N

    umask 022

    export PATH runlevel prevlevel

    mount -a

    echo /sbin/mdev>/proc/sys/kernel/hotplug

    mdev -s

    各个文件的定义详解请见http://blog.csdn.net/mybelief321/article/details/10007719

    4.5

    添加库文件。查看自己的工具链环境变量echo $PATH,可得知其安装目录。如我的是/usr/local/arm/4.3.2/目录

    /opt/jdk1.6.0_32/bin:/opt/jdk1.6.0_32/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm/4.3.2/bin:

    执行命令

    cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib/ -d

    -d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;

    4.6

    需要在dev中创建console 和null节点

    mknod console c 5 1

    mknod null c 1 3

    权限要求加sudo

    4.7

    制作yaffs2根文件系统:

    由于所使用的开发板NAND是256M的,需要使用工具mkyaffs2image-128M进行制作根文件系统。

    cd /home/username/

    mkyaffs2image-128M rootfs/ rootfs.yaffs2

    制作根文件系统文件rootfs.yaffs2,通过uboot进行烧写进开发板。

    而此时的开发板内核是没有支持yaffs2文件系统的,需要进行打补丁。

    5.内核增加支持yaffs2文件系统

    git clone git://www.aleph1.co.uk/yaffs2

    下载yaffs2源码,进入yaffs2源码根目录,给4.15.6内核打补丁

    ./patch-ker.sh c m /your kernel path

    将在内核fs目录底下添加yaffs2文件夹,fs目录底下的Makefile和Kconfig中添加对yaffs2文件系统的支持。

    make menuconfig配置内核,

    Location:                                                                                                                                                                                          │

    │     -> File systems                                                                                                                                                                                  │

    │       -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])                                                                                                                                           │

    │ (2)     -> yaffs2 file system support (YAFFS_FS [=y])

    make clean清理下

    make uImage重新生成内核镜像文件uImage

    6.

    由于yaffs2的更新脚步跟不上kernel的更新,所以在编译uImage时候会出现错误。

    根据错误提示进行相应位置的修改即可:

    iff -urN compare-linux-4.15.6/linux-4.15.6/fs/yaffs2/yaffs_vfs.c linux-4.15.6/fs/yaffs2/yaffs_vfs.c

    --- compare-linux-4.15.6/linux-4.15.6/fs/yaffs2/yaffs_vfs.c     2018-03-03 09:19:34.482203584 +0800

    +++ linux-4.15.6/fs/yaffs2/yaffs_vfs.c  2018-03-02 17:27:47.442250025 +0800

    @@ -136,7 +136,8 @@

    #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26))

    #define Y_INIT_TIMER(a)        init_timer(a)

    #else

    -#define Y_INIT_TIMER(a)        init_timer_on_stack(a)

    +//#define Y_INIT_TIMER(a)      init_timer_on_stack(a)//查看源码4.15.6并无该函数

    +#define Y_INIT_TIMER(a)        __init_timer_on_stack(a,NULL,0)

    #endif

    #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 27))

    @@ -262,6 +263,8 @@

    #define YAFFS_NEW_GET_LINK 0

    #endif

    +#define CURRENT_TIME           (current_kernel_time())

    +

    #define update_dir_time(dir) do {

    (dir)->i_ctime = (dir)->i_mtime = CURRENT_TIME;

    } while (0)

    diff -urN compare-linux-4.15.6/linux-4.15.6/fs/yaffs2/yportenv.h linux-4.15.6/fs/yaffs2/yportenv.h

    --- compare-linux-4.15.6/linux-4.15.6/fs/yaffs2/yportenv.h      2018-03-03 09:19:34.482203584 +0800

    +++ linux-4.15.6/fs/yaffs2/yportenv.h   2018-03-02 17:36:59.814250025 +0800

    @@ -59,6 +59,7 @@

    #define YAFFS_ROOT_MODE                        0755

    #define YAFFS_LOSTNFOUND_MODE          0700

    +#define CURRENT_TIME            (current_kernel_time()) //查看3.4.2源码中该宏所对应函数

    #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))

    #define Y_CURRENT_TIME CURRENT_TIME.tv_sec

    diff -urN compare-linux-4.15.6/linux-4.15.6/include/linux/timer.h linux-4.15.6/include/linux/timer.h

    --- compare-linux-4.15.6/linux-4.15.6/include/linux/timer.h     2018-02-25 18:15:44.000000000 +0800

    +++ linux-4.15.6/include/linux/timer.h  2018-03-02 17:29:01.310250025 +0800

    @@ -19,7 +19,7 @@

    unsigned long           expires;

    void                    (*function)(struct timer_list *);

    c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] [3] 610626052e95c7fbe3d254abc769d9ad.gif

    展开全文
  • jz2440 uboot设备树

    2020-01-13 21:08:27
    目前linux内核采用设备树的方式匹配和初始化设备,主要包含jz2440 uboot和linux内核的patch文件
  • jz2440的uboot代码

    2019-06-10 19:31:12
    jz2440的u-boot代码,包含了补丁文件,学习移植uboot代码
  • JZ2440移植Qt-附件资源

    2021-03-05 15:23:08
    JZ2440移植Qt-附件资源
  • jz2440 ALSA驱动程序

    2019-04-02 20:40:21
    这个是针对JZ2440开发板写的声卡驱动程序,思路清晰,简单易学。
  • JZ2440学习笔记 Chili 2015.5 第一部分,移植uboot2015支持JZ2440串口 前言 本人入手JZ2440半个月,以前未接触过linux,但在校接触过许多不跑linux系统的CPU,具有LPC1114,LPC1343,STM32,blackfin等处理器...
    JZ2440学习笔记

    Chili

    2015.5

    第一部分,移植uboot2015支持JZ2440串口




    前言
    本人入手JZ2440半个月,以前未接触过linux,但在校接触过许多不跑linux系统的CPU,具有LPC1114,LPC1343,STM32,blackfin等处理器的编程经验,对微处理器的原理以及运行方式具有一定的了解。靠着这点小经验,以及新学习的知识,自己动手移植了最新的uboot,绝对原创,得益于韦老师的书籍以及开发板,能让我们这个小白可以踏进linux的世界,但本人毕竟在linux方面只是个类似小白的学生,许多不对之处,希望大家不吝指教!




    说明:阅读本文需要一点的ARM以及S3C2440的基础知识,建议先阅读《嵌入式Linux应用开发完全手册》,此书对对ARM以及JZ2440有很好的介绍和说明,在阅读中有不懂的也可以再去翻看此书,查漏补缺。
    JZ2440移植最新u-boot-2015.04-rc4.tar
    1,配置uboot
    去官网下载最新uboot源代码u-boot-2015.04-rc4.tar,开发环境采用JZ2440光盘上的vmware虚拟机ubuntu9.10。
    本次采用smdk2410的默认配置来配置uboot,然后启动类似linux一样的menuconfig菜单进行配置,然后make,并烧写进JZ2440看效果,然后根据现象一步步修改。
    我们移植uboot的基本原则是:因为我们刚上手,可能什么都不知道,更加不知需要更改什么,这个时候我们就先尽量什么都不改,直接烧写进去看现象,然后根据现象或者提示信息一步步更改,从而移植完成。
    配置命令如下:
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ tar  jxvf  u-boot-2015.04-rc4.tar.bz2
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ cd  u-boot-2015.04-rc4/
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make smdk2410_defconfig
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make menuconfig
    3,在uboot根目录执行
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
    报错:
    cc1: error: bad value (armv4) for -march= switch
    cc1: error: bad value (armv4) for -mtune= switch
    make[2]: *** [include/autoconf.mk] Error 1
    make[1]: *** [silentoldconfig] Error 1
    make: *** No rule to make target `include/config/auto.conf', needed by `include/config/uboot.release'.  Stop.
    错误并不可怕,学会看错误提示,根据提示进行下一步工作。错误提示意思好像是说机器平台不对,那么我们就来指定,打开顶层Makefile,指定交叉编译器和架构平台:
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim Makefile 
    如图所示添加下面两行:
    ARCH=arm
    CROSS_COMPILE=arm-linux-

    图 1 
    完成后,再次执行:make 开始编译
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
    报错:
      AS      arch/arm/lib/vectors.o
      AS      arch/arm/lib/crt0.o
      AS      arch/arm/lib/relocate.o
    arch/arm/lib/relocate.S: Assembler messages:
    arch/arm/lib/relocate.S:50: Error: selected processor does not support `bx lr'
    make[1]: *** [arch/arm/lib/relocate.o] Error 1
    make: *** [arch/arm/lib] Error 2
    耐着性子认真看错误信息,说不支持bx lr指令,这是arm的一个跳转指令,没理由arm交叉编译器不支持啊,是不是版本太低了?
    查看版本:
    arm-linux-gcc -v

    图 2 

    版本为3.4.5,貌似JZ2440光盘上的ubuntu上自带的交叉编译环境是比较老了,那我们网上搜索个新的,装上试试看。
    在http://dl.dbank.com/c01p81pb9i网站有arm-linux-gcc 4.4.3下载,并有详尽的安装方法,读者可自行下载并安装。安装完成后查看版本如下,说明安装成功。

    图 3

    2,编译
    在arm-linux-gcc 4.4.3的基础上进行uboot编译:
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
    接下来就是一路编译成功,并生产uboot.bin等映像文件。

    图 4
    3,烧写默认配置的uboot
    由于JZ2440配有Jlink,Jlink一般来说不支持烧写nand falsh,当然可以购买百问网的Gflash,其可以通过Jlink烧写nand flash。我们一般是购买JZ2440标准配置开发板,那咱就用nor flash启动,并通过Jlink的J-Flash将uboot.bin烧写进nor flash,重启,观察串口输出。 
    Ps:安装 学前班\J-link\USB-ICE,安装完后打开J-Flash, 打开 开发板资料\如何烧写S3C2440裸板程序\s3c2440.jflash工程,打开刚编译成功的文件uboot.bin,按下F5开始编程。
    重启开发板,串口无任何现象,说明默认的smdk2410.h的配置还是不适用与我们现在JZ2440的板子。好了接下来开始一点点修改uboot了。
    4,修改uboot支持JZ2440串口
    4.1 修改uboot时钟配置
    串口没有输出的话,首先想到的肯定是时钟没有配置好,好的,有想法立即就去试试。
    相信看过韦老师的《嵌入式Linux应用开发完全手册》,应该知道S3C2440和S3C2410时钟计算法不一样,因此我们打开smdk2410.c,修改初始化函数中的时钟配置。命令如下:
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim board/samsung/smdk2410/smdk2410.c 
    修改如下:
    1,将时钟宏更改如图
    #define M_MDIV 0x5c
    #define M_PDIV    0x1
    #define M_SDIV    0x1

    图 5 

    2,修改int board_early_init_f(void)函数添加CLKDIVN寄存器配置
    如下:
    writel(0x5, &clk_power->clkdivn);

    图6 


    保存,并编译,烧写,重启开发板查看现象:

    图 7 


    分析:有打印乱码数据,说明板子至少在工作,只是波特率设置不正确,下面看串口波特率在哪里设置,并进行修改就可以了。
    4.2 修改串口驱动
    我们在sourceInsight中根据韦老师开发手册书籍上的说明,按uboot执行的流程一步步查找uboot串口初始化函数,最后发现在u-boot-2015.04-rc4\u-boot-2015.04-rc4-my2440\drivers\serial\serial-s3c24x0.c中
    serial_init_dev(const int dev_index)函数完成串口初始化,调用stati_serial_setbrg(const int dev_index)设置波特率,设置波特率时的获取时钟函数如下:
    ulong get_HCLK(void)
    {
    struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
    #ifdef CONFIG_S3C2440
    switch (readl(&clk_power->clkdivn) & 0x6) {
    default:
    case 0:
    return get_FCLK();
    case 2:
    return get_FCLK() / 2;
    case 4:
    return (readl(&clk_power->camdivn) & (1 << 9)) ?
    get_FCLK() / 8 : get_FCLK() / 4;
    case 6:
    return (readl(&clk_power->camdivn) & (1 << 8)) ?
    get_FCLK() / 6 : get_FCLK() / 3;
    }
    #else
    return (readl(&clk_power->clkdivn) & 2) ? get_FCLK() / 2 : get_FCLK();
    #endif
    }
    说明现在的uboot已经支持获取s3c2440的时钟来自行计算波特率了,但需要我们在配置文件smdk2410.h中定义s3c2440的宏。因此我们就去配置:
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim include/configs/smdk2410.h 
    修改如下:

    图 8 


    保存,现在串口应该就可以用了,我们make下
    book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make

    编译成功并生产uboo.bin,烧写进nor flash,重启开发板,打印如下,说明串口可用了。

    图 9


    转载:http://bbs.csdn.net/topics/391037133

    展开全文
  • jZ2440-S3C2440 -- UART: 终端控制LED亮灭 JZ2440-S3C2440 -- UART: 终端控制LED亮灭 韦东山老师开发板
  • jz2440Led实验

    2015-06-07 15:51:02
    分析基于jz2440Led实验,已验证通过
  • JZ2440学习笔记 Chili 2015.5 第四部分,移植uboot2015支持JZ2440的DM9000 7,修改uboot支持DM9000 Uboot 内核已经支持DM9000网口,先打开DM9000的驱动看看,因为我们看电路图知道DM9000通过内存接口连...
  • JZ2440学习笔记 Chili 2015.5 第三部分,移植uboot2015支持JZ2440的nand flash 6,修改uboot支持nand flash  与nor flash的初始化类似,nand flash初始化在文件u-boot-2015.04-rc4\u-boot-2015.04-...
  • 1.解压linux-2.6.22.6,然后打入补丁 linux-2.6.22.6_jz2440.patch 2. 然后采用韦东山制作好的配置文件 config_ok作为 .config 3. 编译即可。 具体如下:  tar xjf linux-2.6.22.6.tar....
  • jz2440工具驱动和手册.zip
  • jz2440笔记

    2020-11-24 20:22:41
    1.烧写文件方法 1)通过jtag烧写:安装openjtag驱动,再安装oflash 工具,后通过openjtag... 2)通过串口烧写:安装串口工具,jz2440内部通过芯片实现了usb转串口,所以可以通过usb接口以串口方式传输文件。 ...
  • JZ2440->UART: loopback mode

    2019-11-05 08:08:13
    JZ2440->UART: loopback mode

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,792
精华内容 1,116
关键字:

jz2440