file命令的移植

http://hi.baidu.com/kkernel/blog/item/1df359ccf49b431c01e9281a.html

http://my.oschina.net/zengsai/blog/2460

本文转载

如何查看linux命令源代码

2人收藏此文章, 收藏此文章发表于1年前 , 已有 1132次阅读 共 0个评论  2人收藏此文章

用linux一段时间了,有时候想看看ls、cat、more等命令的源代码,在下载的内核源码中用cscope没能找到,在网上搜索了一下,将方 法总结如下:

  1. 以搜索ls命令源码为例,先搜索命令所在包,命令如下:
    lpj@lpj-linux:~$ which ls
    /bin/ls
  2. 用命令搜索该软件所在包,代码如下:
    lpj@lpj-linux:~$ dpkg -S /bin/ls
    coreutils: /bin/ls
  3. 从上一步中可以知道ls命令的实现在包coreutils中,用apt安装(说安装有些歧义,主要是区分apt-get -d)该包的源代码然后解压,代码如下:
    sudo apt-get source coreutils
    cd /usr/src/coreutils-XXX #XXX表示版本号
    sudo tar zxvf coreutils-XXX.tar.gz


    或者只下载源码,然后手动打补丁再解压,代码如下:
    sudo apt-get -d source coreutils
    cd /usr/src
    tar zxvf coreutils-XXX.tar.gz
    gzip -d coreutils-XXX.diff.gz #这一步会生成coreutils-XXX.diff文件
    patch -p0 < coreutils-XXX.diff
    cd coreutils-XXX
    tar zxvf coreutils-XXX.tar.gz

OK,这几步执行完后,就可以进入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令对应的源代码了


Linux file,lrz/lsz,tc 命令移植到ARM
2010-05-21 16:50
Author:   Guo Wenxue
Data:      2010.05.21

file命令的移植:

1,从下面ftp站点下载最新的Linux file命令源代码file-5.04.tar.gz:
ftp://ftp.astron.com/pub/file

2,解压缩并编写configure脚本如下,并执行该脚本:
[guowenxue@localhost file-5.04]$ cat build.sh 
#!/bin/sh
CROSS=/opt/buildroot_350/build_arm/staging_dir/bin/arm-linux-

./configure --host=arm-linux --enable-static  --disable-shared CC=${CROSS}gcc AS=${CROSS}as LD=${CROSS}ld AR=${CROSS}ar RANLIB=${CROSS}ranlib

3,修改file-5.04/src/Makefile文件,添加--static到CFLAGS里,使用静态链接:
CFLAGS = -g -O2 --static

4,修改源代码file-5.04/src/file.c中的main()函数,将
const char *magicfile 设置为 "/usr/share/magic.mgc"或其它路径;

5,执行make,编译生成file-5.04/src/file二进制文件;
[guowenxue@localhost file-5.04]$ file src/file
src/file: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, not stripped

6,将编译生成的file二进制文件和file-5.04/magic/Magdir/放到下载到ARM开发板(/tmp目录下),使用file命令生成magic.mgc文件:
/tmp >: ./file -C -m Magdir
/tmp >: ls Magdir.mgc 
Magdir.mgc

在使用file -C -m Magdir生成magic file之前,我们可以到Magdir里删除一些不用的类型,这样能减小magic.mgc文件的大小。

7,将Magdir.mgc拷贝为/usr/share/magic.mgc;

8,现在可以在ARM上使用file命令了.
/tmp >: ./file -m Magdir.mgc file
file: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped
/tmp >: mv Magdir.mgc /usr/share/magic.mgc
/tmp >: ./file file
file: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped
/tmp >: ./file /usr/sbin/nup 
/usr/sbin/nup: POSIX shell script text executable

如果没有magic.mgc或file命令找不到该文件的话,会报错:
/tmp >: file
file: could not find any magic files!

Reference: 
http://blog.chinaunix.net/u1/38994/showart_2034559.html


lsz/lrz  是linux下x/y/zmodem传输文件协议的实现:

http://www.ohse.de/uwe/software/lrzsz.html


[guowenxue@localhost lrzsz-0.12.20]$ cat build.sh 
#!/bin/sh
CROSS=/opt/buildroot_350/build_arm/staging_dir/bin/arm-linux-

export CC=${CROSS}gcc
export AR=${CROSS}ar
export LD=${CROSS}ld
export AS=${CROSS}as
export RANLIB=${CROSS}ranlib

./configure --host=arm-linux
[guowenxue@localhost lrzsz-0.12.20]$ sh build.sh && make

Traffic Control with Linux Command Line tool, "tc"命令的移植

tc是iproute2中的一个子集:
http://devresources.linuxfoundation.org/dev/iproute2/download/

解压缩iproute2-2.6.34.tar.bz2后修改顶层Makefile:
#options for ipx
ADDLIB+=ipx_ntop.o ipx_pton.o

CROSS=/opt/buildroot_350/build_arm/staging_dir/bin/arm-linux-
CC = ${CROSS}gcc
AR=${CROSS}ar
LD=${CROSS}ld
AS=${CROSS}as
RANLIB=${CROSS}ranlib


HOSTCC = gcc
CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall
CFLAGS = $(CCOPTS) -I../include $(DEFINES)
YACCFLAGS = -d -t -v

修改
SUBDIRS=lib tc ip misc netem genl

SUBDIRS=lib tc 

执行make即得到tc
[guowenxue@localhost iproute2-2.6.34]$ file tc/tc
tc/tc: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked (uses shared libs), not stripped

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值