TINY4412 驱动开发学习笔记整理--环境搭建篇

来源:互联网 发布:seo经验分享 编辑:程序博客网 时间:2024/05/01 22:35


说在前面的话

  此篇是由课堂笔记整理而来,以上课时使用的开发板和工具。

采用pc和开发板交互的方式进行.

PC到开发班的数据传输使用USB,使用dnw 工具进行;

    Dnw的安装:

              tar -xvf dnw-linux.tar.gz

              cd  dnw-linux 

              make 

              Make install

开发板到PC的数据传输使用串口,使用minicom工具进行:

         Minicom 的配置方法:

                执行minicom -s 命令

               在弹出的configuration 对话框中选择 Serial port setup

                进入后输入A 修改Serial Device :/dev/ttyS0 (如若使用USB转串口的话 修改为 /dev/ttyUSB0)

                回车退出,选择Save detup as dfl 成功后选择Exit退出

                若要完全退出minicom 使用组合键ctrl+a _q;

 

ARM开发板的启动过程

1)启动过程

bootloader ----> Linux kernel ---->rootfs ------>  file system

2)bootloader

     (1)bootloader的作用:硬件初始化 引导内核

     (2)bootloader的种类

                   u-boot:遵循GPL条款的开放源码项目

                   vivi:三星公司编写

      (3)u-boot常用命令

       (4)bootloader的引导方式:sd卡或者emmc

3)kernel

        (1)Linux 内核是一个操作系统核心,提供操作系统的最基本的功能

        (2)包括系统的进程,内存,设备驱动程序,文件和网络程序

 4)rootfs

        (1)文件系统是对一个存储设备上的数据和元数据进行组织的机制

            .用于用户和操作系统的交互

        (2)根文件系统属于文件系统的一种

            .具有普通文件系统存储数据文件的功能

            .内核启动时挂载的第一个文件系统,作为其他文件系统的根目录

            .内核代码的镜像文件保存在根文件系统

5)烧写u-boot/kernel/rootfs/file system

        (1)使用友善之臂提供的Superboot4412.bin 

              .Superboot4412.bin具有一健烧写bootloader/Kernel/rootfs

         (2)sd分区

              (a)、将sd卡插入pc

              (b)、卸载sd卡

                     umount /media/*

              (c)、查看sd卡信息

                     fdisk -l 

                        可以查找到sd卡所对应的设备文件

 

              (d)、删除sd卡分区并重新分区

                        fdisk  /dev/sdb

                        删除分区

                        Command (m for help): d

                        Selected partition 1

                        Command (m for help): p

 

                        Disk /dev/sdb: 3904 MB, 3904897024 bytes

                        168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors

                        Units = sectors of 1 * 512 = 512 bytes

                        Sector size (logical/physical): 512 bytes / 512 bytes

                        I/O size (minimum/optimal): 512 bytes / 512 bytes

                        Disk identifier: 0x00000000

 

                           Device Boot      Start         End      Blocks   Id  System

 

                        新建分区,在分区前面留100M给Superboot4412.bin

                        Command (m for help): n

                        Partition type:

                            p   primary (0 primary, 0 extended, 4 free)

                            e   extended

                        Select (default p): p

                        Partition number (1-4, default 1): 1

                        First sector (2048-7626751, default 2048): 204800

                        Last sector, +sectors or +size{K,M,G} (204800-7626751, default 7626751):      (直接回车,选择默认) 

 

                        Command (m for help): p

 

                        Disk /dev/sdb: 3904 MB, 3904897024 bytes

                        168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors

                        Units = sectors of 1 * 512 = 512 bytes

                        Sector size (logical/physical): 512 bytes / 512 bytes

                        I/O size (minimum/optimal): 512 bytes / 512 bytes

                        Disk identifier: 0x00000000

 

                           Device Boot      Start         End      Blocks   Id  System

                           /dev/sdb1          204800     7626751     3710976   83  Linux

                        

                        修改分区的system id

                            Command (m for help): t

                            Selected partition 1

                            Hex code (type L to list codes): b

                            Changed system type of partition 1 to b (W95 FAT32)

 

                            Command (m for help): p

 

 

                            Disk /dev/sdb: 3904 MB, 3904897024 bytes

                            168 heads, 7 sectors/track, 6485 cylinders, total 7626752 sectors

                            Units = sectors of 1 * 512 = 512 bytes

                            Sector size (logical/physical): 512 bytes / 512 bytes

                            I/O size (minimum/optimal): 512 bytes / 512 bytes

                            Disk identifier: 0x00000000

 

                            Device Boot      Start         End      Blocks   Id  System

                            /dev/sdb1          204800     7626751     3710976    b  W95 FAT32

                        保存分区

                            Command (m for help): w

              (e)、格式化分区

                        mkfs.vfat /dev/sdb1 

            (3)烧写Superboot.bin烧写到SD卡中

                    cd <Exynos4412_resource>/images

                    dd iflag=dsync oflag=dsync if=Superboot4412.bin of=/dev/sdb seek=1

            (4)将images文件夹拷贝到sd卡中

            (5)将sd插入开发板,开始烧写系统,默认烧写Android系统到EMMC,包括bootloader/kernel/rootfs/system

                .烧写完成后将boot sw切换到emmc启动

            (6)一健烧写Linux系统

                .将sd重新插入pc

                .修改sd卡images文件夹中的FriendlyARM.ini文件

                        OS = Android 改为 OS = Linux

6)安装arm-linux-gcc

            (1)cd Exynos4412_source/tools

            (2)tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /

                        notes:

                              .安装路径:/opt/FriendlyARM

            (3)vim /etc/profile or /etc/bashrc

                PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

                source /etc/profile 

 7)安装dnw

            notes:

                    .dnw:usb下载工具

            (1)cd Exynos4412_source/tools

            (2)cd dnw-linux

            (3)make && make install

                notes:

                          .udevadm trigger udev规则生效

  8)编译u-boot源码

            (1)tar -xvf uboot_tiny4412-20130729.tgz   

            (2)cd uboot_tiny4412

            (3)vim include/configs/tiny4412.h

                311:

                    #define CONFIG_ENABLE_MMU

                    ------> #undef CONFIG_ENABLE_MMU

                vim board/samsung/tiny4412/config.mk

                   CONFIG_SYS_TEXT_BASE = 0xc3e00000

                   ------>

                   CONFIG_SYS_TEXT_BASE = 0x43e00000

                    notes:

                        .关闭mmu ,直接使用物理地址

             (4)make tiny4412_config

             (5)make

                notes:

                    .会产生u-boot.bin

9)烧写u-boot.bin到sd卡中

            (1)cd sd_fuse

            (2)make

                notes:

                    .会产生mkbl2文件

            (3)cd tiny4412

            (4)将sd卡插入pc

            (5)查看sd卡对应设备文件名

                Disk /dev/sdb: 1990 MB, 1990197248 bytes

                255 heads, 63 sectors/track, 241 cylinders, total 3887104 sectors

                Units = sectors of 1 * 512 = 512 bytes

                Sector size (logical/physical): 512 bytes / 512 bytes

                I/O size (minimum/optimal): 512 bytes / 512 bytes

                Disk identifier: 0x00000000

                Device Boot      Start         End      Blocks   Id  System

                /dev/sdb1          309248     3887103     1788928    b  W95 FAT32

            (6)./sd_fusing.sh /dev/sdb

            (7)将sd卡插入开发板

            (8)启动开关切换到sd卡启动

10)编译kernel源码

            (1) cd Exynos4412_source/Linux

            (2) tar -xvf linux-3.5-20140109.tgz 

            (3) cd linux-3.5

            (4) vim Makefile

                    +197:     ARCH ?=arm

                              CROSS_COMPILE ?= arm-linux-

            (5)cp tiny4412_linux__defconfig .config

            (6)make

                .notes:

                    .在arch/arm/boot/目录下会生成zImage

11)下载内核并运行

            使用usb线与pc连接

        u-boot:

            TINY4412 # dnw 40008000

            TINY4412 # bootm 40008000 

 

        pc:

            dnw zImage 

12)制作根文件系统

        (1)cd Exynos4412_source/Linux

        (2)tar -xvf busybox-1.17.2-20101120.tgz

        (3)cd busybox-1.17.2

        (4)vim Makefile

            +163:ARCH ?= arm 

                CROSS_COMPILE ?=

        (5)make defconfig

        (6)make menuconfig

               Linux Module Utilities  --->  [ ] Simplified modutils (取消选中) --->  [*]   insmod                                                                                                                                                          [*]   rmmod

                                                                                      [*]   lsmod  

                                                                                      [*]     Pretty output 

                                                                                      [*]   modprobe 

                                                                                      [*]     Blacklist support 

                                                                                      [*]   depmod       

        (7)make

        (8)make install

        (9)cp _install/* /nfsroot -ra

        (10)mkdir dev lib sys proc etc tmp

        (11)cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* . -ra

        (12)cd etc

        (13)touch fstab inittab profile 

            ####################################################

                            fstab

             proc        /proc   proc    defaults    0   0                                                                                                      

             sysfs       /sys    sysfs   defaults    0   0

             tmpfs       /tmp    tmpfs   defaults    0   0

 

                           inittab

            ::sysinit:/etc/init.d/rcS //设置内核的hotplug handler 为 mdev, 即当设备热插拔时,由 mdev 接收来自内核的消息并作出相应的回应

            #ttySAC0::askfirst:/.bashrc 

            ttySAC0::askfirst:-/bin/sh //在串口启动一个登陆会话

            ::ctrlaltdel:/bin/umount -a -r //作为init重启执行程序

            ::shutdown:/bin/umount -a –r //告诉init在关机时运行umount命令卸载所有的文件系统,如果卸载失败,试图以只读方式重新挂载

 

 

                          profile

            # /etc/profile: system-wide .profile file for the Bourne shells                                                                                    

            

            #!/bin/sh

            #Ash profile

            #vim:syntax=sh

            #No core file by defaults

            #ulimit -S -c 0>/dev/null 2>&1

            USER="id -un"

            LOGNAME=$USER

            PS1='[root@tiny4412]#'

            PATH=$PATH

            HOSTNAME='/bin/hostname'

            export USER LOGNAME PS1 PATH

 

            ####################################################

        (14)mkdir init.d

        (15)cd init.d

        (16)touch rcS

            ####################################################

                            rcS

                #! /bin/sh                                                                                                                                         

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

                runlevel=S

                prevlevel=N

                umask 022

                export PATH runlevel prevlevel 

                /bin/mount -a   //加载文件/etc/fstab文件中的选项

                

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

                mdev -s         //在 /dev/ 目录下建立必要的设备节点

                /bin/hostname -F /etc/sysconfig/HOSTNAME //设置主机的名字

                        

                                            

            ####################################################

        (17)chmod u+x rcS

        (18)创建设备文件 

            console  null  tty2  tty3  tty4  ttySAC0  ttySAC1  ttySAC2  ttySAC3

13)挂载文件系统

    u-boot:

       TINY4412 # set bootargs=root=/dev/nfs nfsroot=192.168.1.10:/nfsroot  init=/linuxrc ip=192.168.1.20 console=ttySAC0,115200

       TINY4412 # saveenv

       TINY4412 # dnw 40008000 

       TINY4412 # bootm 40008000 

 

    pc:

        dnw zImage

 

   u-boot:

        set bootargs "root=/dev/nfs nfsroot=192.168.1.10:/nfsroot init=/linuxrc ip=192.168.1.20 console=ttySAC0,115200"

 

        saveenv

 

        dnw 41000000

        dnw 40008000

        bootm 40008000 41000000

    pc

        tar -xvf rootfs_qtopia_qt4-20131222.tar.gz -C /nfsroot

        dnw ramdisk-u.img

        dnw zImage

 

        ramdisk地址一般是大于16M的位置 0x1000000,由于Exyons 4412 内存起始地址0x4000000 所以ramdisk地址下载到0x41000000

 

        编译出来的内核也没有问题

 

nfsroot:




后记:开发环境的搭建是我们学习嵌入式开发的第一步,加油!







0 0