初级驱动DAY1(开发环境的搭建)

一. 准备工作
   1. 安装MobaXterm软件
    linux@ubuntu:~$ sudo apt-get install ssh
    //openssh安装
    linux@ubuntu:~$ sudo apt-get install openssh-server
    a.安装MobaXterm软件(一路默认安装即可)
    b.session-->SSH-->主机IP,用户名,密码登录
    c.遇到special passwd则忽略

   2. 安装samba服务器
    1>下载安装samba服务器
    linux@ubuntu:~$ sudo apt-get install samba samba-common
    linux@ubuntu:~$ sudo vi /etc/samba/smb.conf
    [farsight]
    path = /home/me/farsight
    available = yes
    browseable = yes
    writable = yes

    [tftpboot]
    path = /tftpboot
    available = yes
    browseable = yes
    public = yes
    writable = yes

    [opt]
    path = /opt
    available = yes
    browseable = yes
    public = yes
    writable = yes
    //配置samb用户名密码和ubuntu相同
    me@ubuntu:~$ sudo smbpasswd -a me
    //重启生效
    me@ubuntu:~$ sudo /etc/init.d/smbd reload
    me@ubuntu:~$ sudo /etc/init.d/smbd restart
    
   3. 安装库
    linux@ubuntu:~$ sudo apt-get install git-core
    linux@ubuntu:~$ sudo apt-get install gawk wget diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils
    iputils-ping cvs automake autoconf libtool bison flex
    linux@ubuntu:~$ sudo apt-get install libsdl1.2-dev xterm
    linux@ubuntu:~$ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
    linux@ubuntu:~$ sudo apt-get install ncurses-dev libncurses5-dev libncursesw5-dev lib32ncurses5 libssl-dev linux-headers-generic u-boot-tools device-tree-compiler bison flex g++
    libyaml-dev
    linux@ubuntu:~$ sudo apt-get install python-crypto
    linux@ubuntu:~$ sudo apt-get install coreutils bsdmainutils sed curl bc lrzsz corkscrew subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html diffstat libxml2-utils
    linux@ubuntu:~$ sudo apt-get install default-jre
  
   4. 把文件放在对应的位置
   /home/me/farsight/linux-3.0.8.tar.bz2
   /opt/toolchain-4.5.1-farsight.tar.bz2
   /opt/rootfs_fs210.tgz
   //执行如下命令解压
   sudo tar -xvf rootfs_fs210.tgz
   sudo rm -rf toolchain-4.5.1-farsight
   
   
二. Linux内核移植
   1. 解压内核
   me@ubuntu:~/farsight$ tar -xvf linux-3.0.8.tar.bz2
   
   2. 配置交叉编译工具链
   me@ubuntu:~/farsight/linux-3.0.8$ vi Makefile
   195 ARCH            ?= arm
   196 CROSS_COMPILE   ?= arm-none-linux-gnueabi-
   
   3. 配置内核(linux-3.0.8/arch/arm/configs/s5pv210_defconfig)
   me@ubuntu:~/farsight/linux-3.0.8$ make s5pv210_defconfig
   //配置内核
   make menuconfig
   General setup  ---> 
     [*] Configure standard kernel features (expert users)  ---> 
   System Type  --->
     (0) S3C UART to use for low-level messages
   Kernel Features  --->
     Memory split (3G/1G user/kernel split)
   [*] Networking support  --->
     Networking options  --->
       <*> Packet socket
       <*> Unix domain sockets
       [*] TCP/IP networking
          [*] IP: multicasting
          [*] IP: kernel level autoconfiguration
             [*] IP: BOOTP support 
    Device Drivers  --->
       [*] Network device support  ---> 
         [*] Ethernet (10 or 100Mbit)  --->
            <*> DM9000 support
    File systems  --->
       [*] Network File Systems (NEW)  ---> 
          <*> NFS client support
            [*] NFS client support for NFS version 3
              [*] NFS client support for the NFSv3 ACL protocol extension
          [*]   Root file system on NFS
    Kernel hacking  --->
       [*] Early printk
       
    4. 移植网卡驱动
    vi linux-3.0.8/arch/arm/mach-s5pv210/mach-smdkv210.c
    
    static struct dm9000_plat_data smdkv210_dm9000_platdata = {
            .flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
            .dev_addr    = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0xee }, // 设置为座位号码
    };
    
    static struct resource smdkv210_dm9000_resources[] = {
    [0] = {
        .start    = 0x88000000,            //地址端口
        .end    = 0x88000000 + 0x3,
        .flags    = IORESOURCE_MEM,
    },
    [1] = {
        .start    = 0x88000000 + 0x4,       //数据端口
        .end    = 0x88000000 + 0x4 + 0x3,
        .flags    = IORESOURCE_MEM,
    },
    [2] = {
        .start    = IRQ_EINT(10),           //中断号
        .end    = IRQ_EINT(10),
        .flags    = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
    },
    };
    
    static void __init smdkv210_dm9000_init(void)
    {
         /*时序配置:需要技术支持*/
    unsigned int tmp;
    gpio_request(S5PV210_MP01(1), "nCS1");
    s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));
    gpio_free(S5PV210_MP01(1));
        tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);
    __raw_writel(tmp, S5P_SROM_BC1);
    tmp = __raw_readl(S5P_SROM_BW);
    tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);
    tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);
    __raw_writel(tmp, S5P_SROM_BW);
    }
    
    5. 编译内核
    make -j2 zImage 
    
    TIMEC   kernel/timeconst.h
    Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
    /home/me/farsight/linux-3.0.8/kernel/Makefile:140: recipe for target 'kernel/timeconst.h' failed
    make[1]: *** [kernel/timeconst.h] Error 255
    Makefile:945: recipe for target 'kernel' failed
    make: *** [kernel] Error 2

    //解决方案
    vi linux-3.0.8/kernel/timeconst.pl
    372         @val = @{$canned_values{$hz}};
    373         if (!@val) {
    374                 @val = compute_values($hz);
    375         }
    //perl版本升级该版本将defined(@array)去掉了,可以直接使用数组判断非空
    
    6. 进入farsight/linux-3.0.8目录下拷贝内核
    cp -raf arch/arm/boot/zImage /tftpboot/
    
    
三. 设置ubuntu环境
   //支持rootfs文件系统
   me@ubuntu:~$ sudo vi /etc/exports
    12 /opt/rootfs/  *(subtree_check,rw,no_root_squash,async)
   //更新修改,使其生效
   me@ubuntu:~$ sudo exportfs -a
   //重启nfs服务
   me@ubuntu:~$ sudo /etc/init.d/nfs-kernel-server restart

四. 设置开发板
   //所有x:表示分配给自己的IP
   set serverip 192.168.40.x 
   set ipaddr 192.168.40.x
   set gatewayip 192.168.40.1
   set bootcmd tftp 0x40008000 zImage\; bootm 0x40008000
   set bootargs root=/dev/nfs nfsroot=192.168.40.x:/opt/rootfs ip=192.168.40.x init=/linuxrc console=ttySAC0,115200
 

你可能感兴趣的:(ubuntu,嵌入式,c++)