嵌入式学习笔记

前言:

      永远不要小瞧谁或谁,因为你永远都不可能知道他(她)有多强大,小瞧别人只是体现你心胸狭窄和心理不健全的一面. (我的vim配置文件,下载后放入 你的 $HOME 就OK了. http://pan.baidu.com/share/link?shareid=969460230&uk=2805079193 )

copy

scp -r /home/space/music/   root@ip addr:/home/root/others/

=====================================================

我设置的 nfs, tftpboot 目录.

嵌入式学习笔记_第1张图片

 [注意]设置的目录需要添加权限.

sudo mkdir tftpboot -->> sudo chmod 777 tftpboot

sudo mkdir nfs -->> sudo chmod 777 nfs

【tftp的配置】

   sudo apt-get install tftp-hpa tftpd-hpa -->> sudo apt-get install xinetd

   sudo vim /etc/xinetd.d/tftp

service tftp
{
    socket_type          = dgram
    protocol                = udp
    wait                      = yes
    user                      = root
    server                   = /usr/sbin/in.tftpd
    server_args           = -s /tftpboot -c
    disable                  = no
    per_source            = 11
    cps                       = 1002
    flags                     = IPv4
}

嵌入式学习笔记_第2张图片

 

server_args = -s /tftpboot -- /tftpboot 就是你设置的目录.

编辑: sudo vim /etc/default/tftpd-hpa

嵌入式学习笔记_第3张图片

将 TFTP_DIRECTORY 改为你上面设置的目录. 我改为 /tftpboot

将 TFTP_OPTIONS 一定要改为 TFTP_OPTIONS="-l -c -s"  才可以上传.

重启服务: sudo service xinetd restart --> sudo service tftp-hpa restart

测试: tftp localhst  // 本地测试一下tftp. 上传文件和下载文件,亲!你的目录必须有文件才可以喔.

测试结果(正确):

 

【nfs的配置】

    sudo apt-get install nfs-kernel-server

    sudo vim /etc/exports 

   /nfs/rootfs/ *(rw,sync,no_root_squash)  # 加入这条内容. /nfs/*(nfs的目录).

    /nfs/ *(rw,sync,no_root_squash)

    嵌入式学习笔记_第4张图片

我设置的 /nfs目录下的 rootfs文件系统.

嵌入式学习笔记_第5张图片

 

重启服务: sudo service nfs-kernel-server restart

测试:sudo mount -t nfs localhost:/nfs  testnfs // 挂载在本地测试.

 

创建和删除文件测试. (成功的样子)

嵌入式学习笔记_第6张图片

 

嵌入式学习笔记_第7张图片

 

嵌入式学习笔记_第8张图片

 

注意: 当我们的 nfs 和 tftp 建立好的时候, 他们两个主要用来配合开发板使用的, tftp是上传代码的. nfs主要用来挂载根文件系统,后面会讲到.

根文件系统下载: http://pan.baidu.com/share/link?shareid=1651729871&uk=2805079193 (下载后解压在/nfs共享目录下,你压缩在你自己设置的目录下. 小心权限问题)

【minicom的配置】

    sudo apt-get install minicom

    sudo minicom -s

    嵌入式学习笔记_第9张图片  选择 Serial port protocols.

    嵌入式学习笔记_第10张图片

    我的是 串口转USB线,所以是 /dev/ttyUSB0.

    一般默认是 /dev/tty0或者8,串口使用的. .

    F - Hardware Flow Control : No -->> 将 Yes 改为 No,不然键盘无法操作.

    最后选择save setup as...

   minicom 是用来连接开发板的. 将开发板的开关拨起,就会进入提示,

   然后回车,如果你没有提示,像下图这样的话,不要紧张,小事情, 详细看看下面如何烧写(修复)u-boot.

   嵌入式学习笔记_第11张图片 

【u-boot烧写】

     如果你的开发板上没有u-boot的话,需要做下面的操作.

    使用 dnw (http://pan.baidu.com/share/link?shareid=885577491&uk=2805079193) 工具来烧u-boot.

    首先需要讲开发板的那几个小按钮的其中一个拨到 usb dev的选项,详情请查看你的开发板资料. 将你的 sub_dev 用SUB线和windows连接好,

[注意] 使用dnw不当,很容易蓝屏,如果蓝屏后 dnw不能使用,就删除 c 盘下的 dnw.ini文件.

     嵌入式学习笔记_第12张图片 

    红色方框的地方最好设置一下. 要不是 0x2ff80000 或者就是  0x27e00000, 总有一个适合你,

    都不成功的话,上网查一下. 注意安装 sub_dev的驱动..

     如果成功了,会与提示的,看下图.

嵌入式学习笔记_第13张图片

 

     选择菜单 usb port -> transmit -> transmit 选择文件: USB Installer_DDR2.bin

    重复上面选择菜单的动作,然后选择文件: u-boot.bin // 这里额u-boot是已经编译好的.

    注意虚拟机中的 Linux 的 minicm 中会出现提示,马上回车. 进入下面的界面.

嵌入式学习笔记_第14张图片

现在可以进行真正意义上的可以运行的 u-boot.bin 了.

# pri    // 输入 pri命令查看一下.

嵌入式学习笔记_第15张图片

 

为了简单起见,我们就按照开发板给的 serverip 和 netmask, gatewayip

来设置你的虚拟机 Linux的ip 192.168.9.120,网关192.168.9.1 和掩码255.255.255.0.

在 FSC100 # ping 192.168.9.120  // ping 一下虚拟机Linux是否成功. 如果成功会出现 ... is l..

我测试几个失败的用例给大家看,大家需要多多注意. (需要好好检查,虚拟机有没有设置好, 虚拟机的网卡有没有桥接上你连接开发板的网卡, 开发板连接的网卡有没有设置在同一个子网,这些大家需要注意的),

嵌入式学习笔记_第16张图片

 

下面就是开始写入 u-boot_ram.bin, 将u-boot_ram.bin 拷贝进 windows 与 虚拟机 linux共享的目录.

将 u-boot_arm.bin拷贝到 /tftpboot, (我设置的共享目录).

    tftp 0x20009000 u-boot_ram.bin   // 0x20009000 在这里只是作为临时变量而已,没有特殊意义.
    nand erase 0 40000                   // 清空 0 - 40000 的区域.            
    nand write 20009000 0 40000     // 写入.
    saveenv
    // 把设置usb-dev的小开关拨回去, 拔掉USB-dev线         
    reset

    u-boot的命令如果需要详细学习的,请下载: http://pan.baidu.com/share/link?shareid=2163390380&uk=2805079193

    关于 nand flash 和nor flash的区别,后面会讲解, 就像使用上层api一样,先学会如何使用,熟练使用以后,再深入底层代码去探讨和分析原理,所以在开始学习arm的时候,不要对一些问题太过于纠结,适当的囫囵吞枣是对自己有好处的,有能力了再去分析原理, 就像你初学使用sdk的一个api,你非要弄懂这个API到底做了什么,弄了什么,那你自己只是在浪费很多时间,只会使自己更迷糊而已,等有能力再回过头来分析这个api吧。

【u-boot移植】

  我们已经掌握了 u-boot的烧写,我们已经有u-boot可以运行了,如果我们需要移植一个自己编译好的u-boot,

就需要先编译u-boot, 然后连接开发板, minicom, 里面输入上面的 tftp 的命令来写入我们编译以后好的u-boot.

   好吧!我们来开始编译u-boot吧.

   首先我们需要搭建arm的交叉开发环境. [网上相关资料很多,不过我喜欢这种方法]

    sudo vim /etc/profile   // 编辑完成后,用 source /etc/profile

    export PATH=/usr/local/arm-cortex_a8/bin:$PATH   # 加入这条语句.

    # /usr/local/arm-cortex_a8/bin 是你的arm交叉编译工具链的路径.

    嵌入式学习笔记_第17张图片

    u-boot 版本 : 1.1.6

    嵌入式学习笔记_第18张图片

    写入编译器的路径: 如果设置了环境变量,可以省略路径,只剩下 arm-linux-

    嵌入式学习笔记_第19张图片

    还要加入开发板的名称或者其它你需要的名称.

    嵌入式学习笔记_第20张图片

        

【Linux系统移植】

嵌入式学习笔记_第21张图片

 

【文件系统制作】

【arm裸机驱动学习】

    【*】如何去看原理图. 先来看看几个图.

LED

嵌入式学习笔记_第22张图片

嵌入式学习笔记_第23张图片

VGA

嵌入式学习笔记_第24张图片

    看到上面这些图或多或少会让人恐惧,但是真正想要学习ARM的人,这点困难算什么呢?

     好在前人已经总结经验,我也学习到了,所以总结一下,笔记.

【u-boot源码分析】

 ftp://ftp.denx.de/pub/u-boot/

【Linux驱动学习】

   字符驱动:

    [*] LED驱动.

    Makefile.

    

ifeq ($(KERNELRELEASE), )

PWD = $(shell pwd)
KERNEL_DIR  ?= /home/long/armshare/arm_code/源码/linux-2.6.35-farsight
INSTALL_DIR ?= /nfs/rootfs/

modules:
	$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNEL_DIR) M=$(PWD) INSTALL_MOD_PATH=$(INSTALL_DIR) modules_install

clean:
	rm -rf *.o *.ko *.led.c .*.cmd modules.order Module.symvers .tmp_versions

else

obj-m := led.o

endif

    [*] pwm beep (蜂鸣器)驱动.

    嵌入式学习笔记_第25张图片



[Android] sudo apt-get install android-tools-adb 主要用于Android模拟器的各种配置和修改.

解决 android-sdk-man... 无法更新的办法

sudo gedit或者vim /etc/hosts 最后添加74.125.237.1 dl-ssl.google.com

你可能感兴趣的:(嵌入式,邱海泷,hailongqiu)