基础复习
int a; int a[1]; int* a[1]; int型的指针数组 int *a;a=b[1]; 指向int 数组的指针 int (*a)[10] int a(); int *a(); int型的指针函数 int (*a)();int 型的函数指针a
Linux 下的命令
- uname ;内核版本
- whoami ;查看当前用户
- pwd;路径
- cd(change directory) ,直接输cd回车后进入家目录
- ls 显示目录下的内容 ll:显示目录下内容的详细信息
- cp 拷贝
- touch ;创建文件
- mirdir;创建文件夹
- clear ;清屏
- chmod ;改变文件权限 (以8进制表示)
- rwxrwxrwx 每个文件都有三组权限:第一组 rwx:文件的创建者对该文件的权限 第二组 rwx:文件创建者所在组组内用户对该文件的权限 第三组 rwx:系统里面的其他用户对该文件的权限
- ifconfig
- ping
- tar 压缩或解压 -zxvf 压缩 z 压缩 c 产生 x 解压 v 显示过程 f 后更指定的文件 -xvf 解压缩
Linux
Linux系统
/bin | 可执行程序 |
/dev | 块、字符设备节点文件 |
/etc | 主要配置文件和初始化执行文件 |
/lib | 基本的库文件, 茹:C 库,和内核模块(modules) |
/mnt | 挂载点,临时挂载文件系统用 |
/opt | 附加的软件包 |
/proc | 虚拟文件系统,用于内核和进程通讯 |
/sbin | 基本的系统管理程序 |
/tmp | 临时文件目录 |
/usr | 更多的用户程序,包括X server |
/sys | 虚拟文件系统 sysfs 挂载点 |
/var | 可变信息储存,如log等 |
Vim操作
- vi 打开文件, 进入浏览模式, 想修改文件, 进入编辑模式(插入模式 )
- i:在光标位置进入插入模式
- a:在光标后进入插入模式
- o:在下一行新增一行进入插入模式
- I:在行首位置进入插入模式
- A:在行末进入插入模式
- O:在上一行新增一行进入插入模式
进入插入(编辑)模式:
退出插入(编辑)模式:
在编辑模式下,按“esc”键 退出编辑模式。
- 浏览模式(命令行模式):
- dd 删除光标所在行
- ndd:删除光标所在行以下n行
- yy 复制光标所在行nyy:复制光标所在行以下n行的内容
- p: 粘贴复制的内容到光标所在行
- u :撤销上一次操作0:让光标移动到行首
- $:让光标移动到行尾gg:光标移动到第一行
- G:光标移动到最后一行ngg------- 光标移动到第n行
- x:删除光标所在字符全文件搜索 , 输入/跟上要搜素的内容,/string 回车, 后续接着按n, 查找下一个
- 全文替换操作:g---global c-------confirm :%s/要替换的内容/替换成什么/gc:%s/scanf/scanf_1/gc 在本文件里把scanf 替换成scanf_1 全部替换, 但每一次替换需要’y’ 或 ‘n’确认
- 底行模式命令:
(1):q 不保存并且退出文件
(2):q! 强制退出并且不保存
(3):w 保存并且不退出文件 *
(4):wq 保存并且退出文件
Ubuntu和板子通信
1. 虚拟机网卡设置
配置虚拟机的网络为桥接模式(为了连接板子)
- VM菜单:编辑->虚拟网络编辑器,配置Vmnet0为桥接模式,选择有线网卡
- 虚拟机,菜单:虚拟机->设置->硬件->网络适配器->自定义:特定虚拟网络->VMnet0桥接模式
- ubuntu, 右上角,网络处,右键,Edit connections ;wired->Auto Ethernet->Edit;IPv4 settings, 设置为Manual ; Address Add,设置Address为192.168.xxx.xxx,Netmask为255.255.255.0;save,close
- 重启网络,ubuntu右上角,勾掉Enable network,然后重新勾上
- 用ifconfig命令测试, 查看IP是否已经改过来了
2. tftp 服务器配置
tftp: tiny file transfer protocol 轻量级文件传输协议
- 修改tftp服务器的配置文件 /etc/default/tftpd-hpa 来更改tftp的配置
$ sudo vi /etc/default/tftpd-hpa
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/farsight/tftpboot" // 在用户家目录下, 创建一个目录, 指定该目录为tftp服务器的共享目录 TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="-c -s -l" // man tftpd
- cd 回车
mkdir tftpboot
cd tftpboot
echo “abc” > a.txt
在/home/farsight/tftpboot 目录下创建了一个文件 a.txt
- 重启tftp服务器
$ sudo service tftpd-hpa restart
成功会显示:
tftpd-hpa stop/waiting
tftpd-hpa start/running, process xxxxxx ( 重启不成功, 检查ip 地址, eth0)
- 回到家目录, 运行tftp客户端,从服务器上下载文件
$ tftp localhost //tftp 客户端访问本机的
tftp 服务器tftp> get a.txt //从tftp服务器相应的目录下, 下载a.txt
tftp> q
- 上传文件时要注意权限问题, 在家目录下
cd回车echo “123” > b.txt
tftp localhost
tftp> put b.txt 上传
如果上传不成功, 检查 /home/farsight/tftpboot 文件夹 权限, 给 777权限
3. nfs 服务的配置
nfs: network file system 网络文件系统
- 配置NFS服务器
$ sudo vim /etc/exports //nfs配置文件
/home/farsight/rootfs *(rw,sync,no_subtree_check,no_root_squash) 参数说明 (参考讲义)
此处目录可以是(home/farsight/rootfs)
选项可以参考 man 5 exports (/etc/exports注释中提示的)
- 将根文件系统的压缩包rootfs.tar.xz拷贝至/home/farsight,然后解压 tar xvf rootfs.tar.xz,注意权限 产生目录 home/farsight/rootfs
- 重启NFS服务器
$ sudo service nfs-kernel-server restart
- 进行挂载测试
sudo mkdir /mnt/ttt
$ sudo mount -t nfs localhost:/home/farsight/rootfs /mnt/ttt
$ ls -l /mnt/ttt //如果看到和/home/farsight/rootfs 相同的文件, nfs 配置好了
- 卸载
$ sudo umount /mnt/ttt
4. 交叉编译工具链
【实验环境】
- ubuntu 12.04发行版
- FS4412平台
【实验步骤】
- 解压工具链压缩包
$ cd ~
$ mkdir toolchain$ cd toolchain
将第一天/工具/gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压
$ tar xvf gcc-4.6.4.tar.xz
- 环境变量的添加修改文件
sudo vi /etc/bash.bashrc
在该文件最后添加如下内容
export PATH=$PATH:/home/farsight/toolchain/gcc-4.6.4/bin
重启配置文件
$ source /etc/bash.bashrc
- 工具链的测试
$ arm-none-linux-gnueabi-gcc –vUsing built-in specs.
裁剪Linux内核
1. uboot
1.1 uboot配置
uboot是bootloader的一种,并且是开源的。
uboot需要配置几个重要的环境变量
- ipaddr —— 描述板子的 ip 地址
- serverip —— 电脑上ubuntu的 ip 地址
setenv ipaddr 192.168.100.191
- bootcmd —— uboot 启动后主动执行 bootcmd 环境变量的内容
setenv bootargs root=/dev/nfs nfsroot=192.168.100.192:/home/farsight/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.100.191 clk_ignore_unused
- bootargs —— 内核启动时需要的参数设置
setenv bootargs root=/dev/nfs nfsroot=192.168.100.192:/home/farsight/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.100.191 clk_ignore_unused
// root=/dev/nfs —— 指明板子用的是nfs 网络文件系统
// nfsroot —— 板子要挂载的文件系统在哪里?
1.2 uboot命令
- pri ———— 查看环境变量
- setenv var1 123 ———— 设置环境变量var1 , 它的初始值123setenv var1 —— 删除配置的 var1 环境变量
- tftp —— uboot 的tftp 客户端
- tftp 41000000 uImage // 从服务器的tftp指定的文件夹 下载uImage 到内存41000000
- tftp 42000000 exynos4412-fs4412.dtb // 从服务器的tftp指定的文件夹 下载设备树文件exynos4412-fs4412.dtb 到内存41000000
- bootm —— 从内存启动bootm 参数1 参数2 参数3参数1 : 内核(uImage) 在内存的地址参数2: 文件系统在内存的地址参数3: 设备树(exynos4412-fs4412.dtb) 在内存的地址
- bootm 41000000 - 42000000
- boot —— 主动执行bootcmd 环境变量的内容
2. 板子上运行程序
- 配置好上述相应环境后,在 ubuntu 中启动 ftp 服务器,nfs 服务器,(sudo),如果无法将 ftp 服务器上的 uImage 内核文件以及设备树文件 exynos4412-fs4412.dtb下载到板子上的话,需要给 ftp服务器目录以及其下的所有内容授予 777 权限。
- 在ubuntu系统的 nfs 设置的目录下,新建一个
.c
文件,调用 vim 编辑器,将输出 Hello,Wold! 的程序写好保存,使用之前配置好的交叉编译环境编译该文件arm-none-linux-gnueabi-gcc test.c -o test // 这里不使用 -o 命令也行,默认会生成 a.out 的文件
此时会在该文件该目录下生成一个 test.out 文件
- 由于我们之前将该目录挂载到板子上,所以板子上就可以看到该 test.out 文件,通过命令
./test.out
,就可以看到运行结果,即 putty 上输出 Hello,World!
注:
- 配置完之后 ping 主机,检查板子能否和 ubuntu 连通。
- 使用 boot 命令重启完成后,如果卡在了下载文件的地方,检查 ftp ,nfs 文件是否配置好,服务是否启。
sudo service tftpd-hpa restart //启动 tftp 服务
#include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char *argv[]) { int i; int fdin,fdout; //return file number; char buf[]; ssize_t len,temp printf("argc = %d",argc); for (i = 0;i < argc;i++){ printf("argv[%d]=%s",i,argv[i]); } fdin = open(argv[1], O_RDONLY); fdout = open(argv[2], O_WRONLY); printf("fdin = %d, fdout = %d",fdin,fdout); while(1){ len = read(fdin,buf,20); temp = write(fdout,buf,len); } close(fdin); close(fdou); }
Loading Comments...