前言:
永远不要小瞧谁或谁,因为你永远都不可能知道他(她)有多强大,小瞧别人只是体现你心胸狭窄和心理不健全的一面. (我的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 目录.
[注意]设置的目录需要添加权限.
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
}
server_args = -s /tftpboot -- /tftpboot 就是你设置的目录.
编辑: sudo vim /etc/default/tftpd-hpa
将 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)
我设置的 /nfs目录下的 rootfs文件系统.
重启服务: sudo service nfs-kernel-server restart
测试:sudo mount -t nfs localhost:/nfs testnfs // 挂载在本地测试.
创建和删除文件测试. (成功的样子)
注意: 当我们的 nfs 和 tftp 建立好的时候, 他们两个主要用来配合开发板使用的, tftp是上传代码的. nfs主要用来挂载根文件系统,后面会讲到.
根文件系统下载: http://pan.baidu.com/share/link?shareid=1651729871&uk=2805079193 (下载后解压在/nfs共享目录下,你压缩在你自己设置的目录下. 小心权限问题)
【minicom的配置】
sudo apt-get install minicom
sudo minicom -s
我的是 串口转USB线,所以是 /dev/ttyUSB0.
一般默认是 /dev/tty0或者8,串口使用的. .
F - Hardware Flow Control : No -->> 将 Yes 改为 No,不然键盘无法操作.
最后选择save setup as...
minicom 是用来连接开发板的. 将开发板的开关拨起,就会进入提示,
然后回车,如果你没有提示,像下图这样的话,不要紧张,小事情, 详细看看下面如何烧写(修复)u-boot.
【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文件.
红色方框的地方最好设置一下. 要不是 0x2ff80000 或者就是 0x27e00000, 总有一个适合你,
都不成功的话,上网查一下. 注意安装 sub_dev的驱动..
如果成功了,会与提示的,看下图.
选择菜单 usb port -> transmit -> transmit 选择文件: USB Installer_DDR2.bin
重复上面选择菜单的动作,然后选择文件: u-boot.bin // 这里额u-boot是已经编译好的.
注意虚拟机中的 Linux 的 minicm 中会出现提示,马上回车. 进入下面的界面.
现在可以进行真正意义上的可以运行的 u-boot.bin 了.
# pri // 输入 pri命令查看一下.
为了简单起见,我们就按照开发板给的 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..
我测试几个失败的用例给大家看,大家需要多多注意. (需要好好检查,虚拟机有没有设置好, 虚拟机的网卡有没有桥接上你连接开发板的网卡, 开发板连接的网卡有没有设置在同一个子网,这些大家需要注意的),
下面就是开始写入 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交叉编译工具链的路径.
u-boot 版本 : 1.1.6
写入编译器的路径: 如果设置了环境变量,可以省略路径,只剩下 arm-linux-
还要加入开发板的名称或者其它你需要的名称.
【Linux系统移植】
【文件系统制作】
【arm裸机驱动学习】
【*】如何去看原理图. 先来看看几个图.
LED
VGA
看到上面这些图或多或少会让人恐惧,但是真正想要学习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 (蜂鸣器)驱动.
[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