Chinaunix首页 | 论坛 | 博客
  • 博客访问: 297076
  • 博文数量: 103
  • 博客积分: 2345
  • 博客等级: 大尉
  • 技术积分: 902
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-01 09:10
文章分类

全部博文(103)

文章存档

2022年(1)

2018年(3)

2017年(2)

2016年(3)

2015年(8)

2014年(8)

2013年(2)

2012年(9)

2011年(29)

2010年(20)

2009年(18)

我的朋友

分类: LINUX

2012-02-01 14:16:01

下面再写一点ltib的常用命令参数吧,虽然觉得对其编译内核和文件系统流程有了一定了解,但是对其命令参数用过的还不是很多,可以说是不甚了解,下面介绍一些,希望有用:


首先一个比较有用的命令参数就是help,一个人忘记命令参数很常见,何况刚开始熟悉这个工具。下面这个命令行可以查看ltib命令的使用帮助:
$ ./ltib --help                        ## 这个等同于 ./ltib -h

在编译内核和文件系统时,有时忘了我们选了哪些程序包来进行编译操作,我们可以用下面的命令来查看当前安装模式下所有可用的程序包,是否被选择编译进工程 :
$ ./ltib -m listpkgs                ## 此命令是根据ltib的配置来显示
查看配置中已选编译的程序包,如内核版本包,系统工具包:
$ ./ltib -m listpkgs | grep ' y '

如果想看编译过程产生的信息并把这些信息也保存,以备以后查看,可用以下命令
$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs-our-final --batch 2>&1 | tee ltib_log.txt
## 保存编译过程产生的信息及错误信息全部保存到ltib_log.txt文件中

ltib提供了一种shell模式,它直接提供了我们当前配置的交叉编译工具链模式,下面的命令能让我们进入ltib的shell环境
$ ./ltib -m shell        ## 完成后会给出提示,进入shell模式的提示符 'LTIB>'
                        ## 输入exit可退出shell模式
## 下面的命令可以看一下这个有什么用,我直接给出命令,它下面就是这个命令的结果,不再解释
        LTIB> gcc --version
        powerpc-linux-uclibc-gcc (GCC) 3.4.3
        Copyright (C) 2004 Free Software Foundation, Inc.
        This is free software; see the source for copying conditions.  There is NO
        warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
        LTIB>

有时候我们想看一下某些程序包的源码,比如kernel、uboot等这些看了有益于身心健康的程序源码,该怎么办呢? 还有一种情况就是这些源码中存放有板子的各种配置文件,比如内存映射分配,也需要看一下源码文件,其命令格式为 $ ./ltib -m prep -p
## 下面这部分我是在large文件夹下操作,所写路径也是相对于/usr/local/mpc8349/large/来写的,而不是mytest文件夹下
## 例如我们要查看MPC8349ITX开发板上vsc7385的内存分配,或查找VSC7385的驱动模块部分,需要看uboot、内核源码,以下命令得到内核源码
$ ./ltib -m prep -p kernel
## 解压后的内核源码位于rpm/BUILD/linux-2.6.13/
## 其中vsc7485的驱动是rpm/BUILD/linux-2.6.13/drivers/net/gianfar_phy.c
## 下面操作必须在原来的large文件夹下操作,为什么这么做?自己思考吧。以下命令可以得到uboot源码
$ ./ltib -m prep -p u-boot
## 解压后得到的uboot源码位于rpm/BUILD/u-boot-1.1.3
        ## 其中有关MPC8349MITX板子配置信息的重要文件为/include/configs/MPC8349ITX.h
        ## 在上面的这个文件中可用看到VSC7385的内存分配基地址信息(#define CFG_VSC7385_BASE     0xF8000000)
        ## 不用uboot命令的话,可参看一下源码帮助理解。
## 注:上面这段命令操作我之所以选择在/usr/local/mpc8349/large文件夹下,是因为要得到某些程序源码,首先它得编译过。

上面介绍了一个ltib编译内核和文件系统比较好用的办法,当你比较熟悉了ltib工作流程,完全可以自己配置交叉编译工具链,内核和文件系统,然后编译,可以用下面这个命令行
$ ./ltib --configure

如果想重新产生所有内核和RFS镜像有以下三个办法:
## 办法一: 直接调用配置文件编译,如果配置文件没有更新,且编译过的目标镜像没有变化,会不进行编译。若有任何改动,会执行编译
$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs-our-final --batch
## 办法二: 如办法一一样,但强制重新编译
$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs-our-final --batch -f
## 办法三: 清除所有编译的程序包,然后重新配置编译镜像
$ ./ltib -m distclean                ## 清除ltib工程文件
$ ./ltib --configure                ## 重新配置编译

假如我们对ltib的配置文件不满意,想自己通过配置操作来熟悉ltib的各种配置,或者相关工作做完了,甚至是看它不顺眼,都可以采用此操作,把LTIB完全卸载,
## 首先执行命令:
$ ./ltib -m distclean                ## 此操作将彻底清除所有当前ltib工程文件
                                ## 此命令不要轻易使用,除非比较熟悉ltib编译配置过程
## 然后以root身份执行以下操作(注意:此操作将卸载所有的公共文件)
# rm -rf /opt/freescale/pkgs
# rm -rf /opt/freescale/ltib
# rm                 ## 执行文件ltib的上级目录
## 另一种更加暴力的办法是root身份运行rm命令来删除所有

下面再写一下外部内核模块的编译,假如我们有一个文件夹test(位于主目录/home/liuby/下),该文件夹包含程序源码文件test.c和Makefile,这两个文件的内容附在此段内容的最后。
## 首先我们得到内核源码,然后再编译,为什么这么做,我也不懂~~~,有些纳闷,以后再解决
$ ./ltib -m prep -p kernel
$ ./ltib -m scbuild -p kernel        ## 编译的镜像为rpm/BUILD/linux/arch/ppc/boot/images/uImage
## 将test文件夹copy到内核的driver文件夹下
$ cp -a ~/test  rpm/BUILD/linux/drivers/
## vi修改driver文件夹下的Makefile
$ vi rpm/BUILD/linux/drivers/Makefile
## 可以仿照Makefile里的内容在最后添加如下一行
ojb-m               += test/                 ## 然后保存退出
## 修改test文件夹下的test.c和Makefile确保其正确无误。
## 下面的命令是进入ltib的shell环境,然后进入到test目录,然后编译
$ ./ltib -m shell
LTIB> cd rpm/BUILD/linux/drivers/test/
LTIB> make V=1 ARCH=ppc
## rpm/BUILD/linux/drivers/test/test.ko就是我们想要的module,下载到板子上用insmod test.ko来执行模块(rmmod test.ko是卸载模块)
        ++++++++++++++++下面为test.c程序内容++++++++++++++++++
        #include
        #include
        #include
        MODULE_LICENSE("Dual BSD/GPL");
        static int hello_init(void)
        {
            printk(KERN_ALERT "Hello, world\n");
            printk(KERN_ALERT "IMMR virtual address: %X\n", VIRT_IMMRBAR);
            printk(KERN_ALERT "IMMRBAR: %08lX\n", *(unsigned long*)(VIRT_IMMRBAR + 0x00000));
            printk(KERN_ALERT "SPRIDR : %08lX\n", *(unsigned long*)(VIRT_IMMRBAR + 0x00108));
            return 0;
        }
        static void hello_exit(void)
        {
            printk(KERN_ALERT "Goodbye, cruel world\n");
        }
        module_init(hello_init);
        module_exit(hello_exit);
        ++++++++++++++++上面为test.c程序内容++++++++++++++++++
        +++++++++++++++下面为Makefile程序内容+++++++++++++++++
        ifneq ($(KERNELRELEASE),)
        obj-m := test.o
        else
        KDIR := ../..
        PWD := $(shell pwd)
        default:
            $(MAKE) -C $(KDIR) M=$(PWD)
        endif
        +++++++++++++++上面为Makefile程序内容+++++++++++++++++
## 类似地我们可以编译vlan配置模块
阅读(845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~