应用层通过操作文件操控硬件

使用制作好的工具链:
刚开始学习时,用一些已经制作好的工具链,使用以下命令解压到gcc-3.4.5-glibc-2.3.6目录

cd /work/tools
tar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

然后在环境变量PATH中增加路径,入下所示: (很重要,还可以添加在/etc/bash.bashrc中,添加过后重启服务:sudo source /etc/bash.bashrc)

export PATH=$PATH:/work/tools/gcc-3.4.5-glibc-2.3.6/bin

为了不要每次使用时都手动设置PATH,可以在/etc/environment中修改PATH的值,如下操作:

PATH="/usr/local/sbin:/nsr/local/bin:/usr/shin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin

ldd a.out 查看a.out依赖的库

调用静态库:编译的时候链接上就好了,以后就不用了

调用共享库的方法:
1.将库复制到/lib

2.添加到环境变量:export LD_LIBRARY_PATH=共享库路径

3.cd /etc/ld.so.conf.d/
sudo vim good.conf(添加库)
sudo ldconfig(更新)

静态库:

ARCH = x86

ifeq ($(ARCH), arm)
CROSS_COMPILE = arm-cortex_a8-linux-gnueabi-
endif

ifeq ($(ARCH), x86)
CROSS_COMPILE =
endif

INCLUDE = ./include

all: libhello.a
$(CROSS_COMPILE)gcc -I$(INCLUDE) -c test.c -o test.o
$(CROSS_COMPILE)gcc test.o -o test -L./hello -lhello

libhello.a : hello/hello.c
$(CROSS_COMPILE)gcc -I$(INCLUDE) -c hello/hello.c -o hello/hello.o
$(CROSS_COMPILE)ar -rcs hello/libhello.a hello/hello.o

clean:
rm -rf *.i *.S *.o test *.a

backup:
tar cvf ../test.tar.gz ../1503

共享库(动态库):

ARCH = x86

ifeq ($(ARCH), arm)
CROSS_COMPILE = arm-cortex_a8-linux-gnueabi-
endif

ifeq ($(ARCH), x86)
CROSS_COMPILE =
endif

INCLUDE = ./include

all:
$(CROSS_COMPILE)gcc -I$(INCLUDE) -c test.c -o test.o
$(CROSS_COMPILE)gcc test.o -o test -L./hello -lhello

lib : hello/hello.c
$(CROSS_COMPILE)gcc -I$(INCLUDE) -c hello/hello.c -o hello/hello.o
$(CROSS_COMPILE)ar -rcs hello/libhello.a hello/hello.o

sh_lib: good/good.c
$(CROSS_COMPILE)gcc -I$(INCLUDE) -c good/good.c -o good/good.o
$(CROSS_COMPILE)gcc -shared -fpic -o good/libgood.so good/good.o

clean:
rm -rf *.i *.S *.o test *.a hello/*.o

backup:
tar cvf ../test.tar.gz ../1503

反汇编生成的可执行文件:-objdump -d test > test.dis
粗略的看下test里面的内容: size test
nm -a test.o
nm -Aal test.o
丢弃无用的信息,减小代码体积:arm-cortex_a8-linux-gnueabi-srtip test

搭载开发板环境:
1. 开发板tftp使用
1.1 开发板跟tftp服务器通过网线相连

1.2 在开发板串口终端ping tftpserver (ping 192.168.3.3) (当Ping不通的时候将开发板的ipaddr设置和主机一个网段)
host 192.168.3.3 is alive

需要设置环境变量(printev setenv)
gatewayip=192.168.1.1
ipaddr=192.168.3.5
netmask=255.255.0.0
serverip=192.168.3.3

例:
setenv ipaddr 192.168.3.5 (设置开发板环境变量的命令)
saveenv (保存)

网络配置管理:

系统中的网络配置文件有:/etc/interfaces
/etc/hosts
/etc/resolv.conf

基本的命令: ifconfig eth0 192.168.1.20 (临时修改IP)
ping 192.168.1.20 -c 4 (表示发送4个包就结束)

ifconfig down 关
ifconfig up 开

ifconfig -a (显示所有网卡信息)

IP地址存放的配置文件:/etc/network/interfaces (用cat查看或者vim编辑,一下内容可参考)

1 auto lo
2 iface lo inet loopback

/*******设置成动态获取IP*********/
3 auto eth0
4 iface eth0 inet dhcp
/*******重启网络**************/
/etc/init.d/networking restart
dhclient

设置成动态IP

/*******设置静态IP***************/
5 iface eth0 inet static
6 address 10.0.0.100 // IP地址
7 netmask 255.255.255.0 //子网掩码
8 gateway 10.0.0.1 //网关

1.3 设置tftp 服务器端服务(主机)

sudo /etc/init.d/tftpd-hpa restart
tftpd-hpa stop/waiting
tftpd-hpa start/running, process 11471

安装tftp --> 配置服务器 (sudo vim /etc/default/tftpd-hpa)
--> 本机测试(tftp localhost)-->开发板测试(tftp 20008000 zImage go 20008000)

TFTP服务器配置:

1.sudo apt-get install tftp-hpa tftpd-hpa //安装软件包
2.sudo vim /etc/defalut/tftpd-hpa //修改配置文件,添加一下内容

TFTP_USERNAME="tftp" //服务器名
TFTP_DIRECTORY="/tftpboot" //该路径必须存在
TFTP_ADDRESS="0.0.0.0:69" //设定可访问用户,这里是所有用户都可访问
TFTP_OPTIONS="-l -c -s" //可查看可创建......

3.sudo service tftpd-hpa restart //重启tftp服务器,加载修改过的配置文件

4.tftp客户端操作; 下载的时候在主目录,不要在根目录下,可能出错!权限问题!
tftp localhost
tftp 主机IP //两种方法都是连接服务器的方法

tftp> get //从服务器获取文件
tftp> put //向服务器发送文件
tftp>? //获取帮助
tftp>q //退出

1.4 设置nfs 服务 (主机)
sudo /etc/init.d/nfs-kernel-server restart
Exporting directories for NFS kernel daemon...
* Starting NFS kernel daemon

安装tftp服务--> 配置nfs (sudo vim /etc/exports)-->提供rootfs (tar xvf rootfs.tgz)
---> 本机测试(sudo mount -t nfs localhost:/source/rootfs ./temp)-->开发板测试

开发板终端:
setenv bootargs root=nfs nfsroot=192.168.3.3:/source/rootfs ip=192.168.3.5 init=/linuxrc console=ttySAC0,115200
saveenv

NFS配置:

1.sudo apt-get install nfs-kernel-server //安装软件包

2.vi /etc/exports //修改配置文件,可添加如下内容:
/nfs *(rw,sync,no_root_squash) //服务器共享的文件是根目录下的nfs,并且可读写,同步,不限用户
/nfs 192.168.1.22(rw,sync,no_root_squash)//指定192.168.1.22 客户才能共享该路径

3.sudo /etc/init.d/nfs-kernel-server restart //重启nfs 服务器并加载配置文件/etc/exports

客户端操作:
showmount -e ip 查看服务器有哪些路径可以给客户端共享,ip 代表服务器 ip 地址
showmount -e localhost

root@lg-desktop:~# showmount -e localhost 自己共享的目录记得权限设置,没有特殊保密文件可设置为777
Export list for localhost:
/tmp *
/nfs *
/*******上面如果没显示,可能是配置好后没有重启**************/

/*****把服务器 192.168.1.20 的 /nfs 挂载到当前客户端的 /tmp******/

mount -t nfs 192.168.1.20:/nfs /tmp

/******挂载成功后可以通过 mount 命令检测******/

#mount
localhost:/nfs on /tmp type nfs (rw,addr=127.0.0.1)

完成后卸载:

umount /tmp //需要退出/tmp才能操作

压缩:
zip : tar -cvf a.tar a
bz2 : tar -cvjf a.tar.bz a
gz : tar -cvzf a.tar.gz a

解压:

zip : tar -xvf a.tar
bz2 : tar -xvjf a.tar.bz
gz : tar -xvzf a.tar.gz

Makefile中静态库,动态库的创建和使用以及解压缩命令的更多相关文章

  1. Linux中创建和使用静态库&动态库

    库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...

  2. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  3. windows库的创建和使用:静态库+动态库

    windows库的创建和使用:静态库+动态库   一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...

  4. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  5. Linux 静态库&动态库调用

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  6. 静态库动态库的编译、链接, binutils工具集, 代码段\数据段\bss段解释

    #1. 如何使用静态库 制作静态库 (1)gcc *.c -c -I../include得到o文件 (2) ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库 ...

  7. 生成lua的静态库.动态库.lua.exe和luac.exe

    前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...

  8. JNI_Android项目中调用.so动态库

    JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 參考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者 ...

  9. CVI中调用VC动态库

    1.在VC环境中建立新工程,创建32位动态库(Win32 Dynamic-Link Library)  -> A simple DLL project 2.在工程中可加入别的动态库,在工程菜单中 ...

  10. C++开发新版本vs使用旧版本vs编译的静态库动态库

    关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...

随机推荐

  1. Ubuntu搭建svn服务器

    一,安装必须的软件包. sudo apt-getinstall subversion 二,基本的SVN服务器配置        1,新建一个目录用于存储SVN所有文件                # ...

  2. 深入Docker

    深入Docker 作者:ramanallamilli 随着持续交付等新型开发方法的兴起,工程师再也不会凡事靠运气,希望提交代码上去后,它能在未知环境正常运行.我们可以看到业界这样的转变——开发,质量保 ...

  3. [原创]WinForm分页控件制作

    先简单说一下思路: 1.做一个分页控件的导航类,即记录总页数.当前页.每页记录数,下一页.上一页.跳转等操作的页数变更. class PageNavigation{/// <summary> ...

  4. Myeclipse——SSH框架搭建

    Struts2.x+Spring3.x+Hibernate3.x 一.首先建立一个Web 工程 二.搭建Struts 右键工程,选择MyEclipse->Add Struts Capabilit ...

  5. maven pom.xml

    什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...

  6. 【图像处理】【SEED-VPM】5.uImage的烧写 & NFS烧写文件系统

    基于 TFTP 烧写 uImage 当用户对 SEED-VPM6467 下的内核驱动源码进行调整或者添加新的设备驱动后,需要对内核进行重新编译配置,编译生成内核镜像后,可以通过 tftp 下载到 SE ...

  7. pwnable.kr-flag

    题目: 使用 file 命令查看下载回来的 flag 文件,发现是一个64位的 ELF 可执行程序.通过查看,发现其具有明显的 UPX 压缩标志,所以解压之. 使用命令upx –d 进行脱壳,如果没有 ...

  8. SET ANSI_NULLS ON ……

    SET QUOTED_IDENTIFIER ON   SET ANSI_NULLS ON    SET QUOTED_IDENTIFIER ON  GO  是什么意思?    语法  SET QUOT ...

  9. Avast!:小型网站最易遭受的3种黑客攻击

    avast是捷克研发的杀毒软件,从网站上找到一篇avast关于网站安全的文章,觉得颇有意思,因此想到翻译过来与大家共享.有不对之处还望大家批评指正. 一个拥有上万访问者的小型网站管理员发来一份信,向我 ...

  10. linux学习 命令ll后字段的解释(转)

    原文链接:http://jz20080153.blog.sohu.com/161554070.html ls -l 列表信息详解 我们平时用ls -l 命令查看一个目录下的文件和子目录的详悉信息时,会 ...