Fedora 下编译 linux fetion 应用程序demo
1: 安装编译环境
sudo yum install qt4-devel curl-devel gcc glibc-devel
2: 去 http://www.libfetion.cn/Linux_demoapp_download.html 下载最新的libfetion GUI源代码
3: 使用解压命令解压下载后的文件
tar -zxvf linux-fetion-***.tar.gz (***为程序版本号)
4: 进入解压后的文件夹
cd linux-fetion-*** (***为程序版本号)
5: 如果你是64位系统,则运行64_libfetion.sh 脚本
./64_libfetion.sh
6:运行编译命令
qmake-qt4
make
7: 运行安装程序脚本
./install.sh
8: 最后: 如果一切顺利的话。你可以在程序菜单看见libfetion了, 这时你可以删掉下载的文件了.
原文地址:http://hi.baidu.com/cygnusnow/blog/item/81f6024327bb1d179213c67b.html
......
下面的文件的使用方法是:将下面的文件保存在linux内核源码目录中,文件的名称是.config,然后make menuconfig,在出现
的配置界面中选择Load Configuratio选项,然后可以在这个基础上修改自己的kernel。下面的配置是基于s3c2410,支持yaffs2
文件系统。我看了一下编译出来的uImage大概在800k左右,呵呵么这是本人第一次成功裁减内核。
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.22.6
# Tue Mar 16 20:42:20 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
# CONFIG_GENERIC_CLOCKEVENTS is not set
CONFIG_MMU=y
CONFIG_NO_IOPORT=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE= ......
下面的文件的使用方法是:将下面的文件保存在linux内核源码目录中,文件的名称是.config,然后make menuconfig,在出现
的配置界面中选择Load Configuratio选项,然后可以在这个基础上修改自己的kernel。下面的配置是基于s3c2410,支持yaffs2
文件系统。我看了一下编译出来的uImage大概在800k左右,呵呵么这是本人第一次成功裁减内核。
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.22.6
# Tue Mar 16 20:42:20 2010
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
# CONFIG_GENERIC_CLOCKEVENTS is not set
CONFIG_MMU=y
CONFIG_NO_IOPORT=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE= ......
一、头文件
gcc 在编译时寻找所需要的头文件 :
※搜寻会从-I开始
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找内定目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
二、库文件
编译的时候:
※gcc会去找-L
※再找gcc的环境变量LIBRARY_PATH
※再找内定目录 /lib:/usr/lib: /usr/local/lib:这是当初compile gcc时写在程序内的
三、运行时动态库的搜索路径
1、在配置文件/etc/ld.so.conf中指定动态库搜索路径
2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)
3、在编译目标代码时 ......
【转】Linux内核裁剪的具体步骤
在menuconfig中配置:
详细介绍内核配置选项及删改情况
第一部分:全部删除
Code maturity level options ---> 代码成熟等级选项
[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。
第二部分 :除以下选项,其它全部删除
General setup—〉
System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进
行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才
能运行,所以不用考虑,这里一定要选。
第三部分:除以下选项,其它全部删除
Loadable module support ---> 可引导模块支持 建议作为模块加入内核
[] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译
后可在系统内核运 ......
在前面的准备工作完成之后,先实验一下,谈不上真正的移植 ,因为代码都没有改的。
首先修改顶层的Makefile,修改ARCH,CROSS_COMPLIE变量。
#ARCH ?= $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
执行make smdk2410_defconfig
make
然后执行make uImage,注意需要含有mkimage工具,这个工具是在编译uboot时产生的,同时需要将mkimage拷贝到path
环境变量中。
最终在arch/arm/boot/目录下生成uImage文件,下载该文件到开发板中,既可以观察结果,当然此时是没有文件系统的支持,
内核肯定是启动不起来的。
为了开始内核代码的移植,首先必须得了解内核的启动过程。
内核最先执行的代码是在arch/arm/kernel/head.S文件,该文件只需要关注下面的一段代码:
.section ".text.head", "ax"
.type stext, %function
ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
&nbs ......
在前面的准备工作完成之后,先实验一下,谈不上真正的移植 ,因为代码都没有改的。
首先修改顶层的Makefile,修改ARCH,CROSS_COMPLIE变量。
#ARCH ?= $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
执行make smdk2410_defconfig
make
然后执行make uImage,注意需要含有mkimage工具,这个工具是在编译uboot时产生的,同时需要将mkimage拷贝到path
环境变量中。
最终在arch/arm/boot/目录下生成uImage文件,下载该文件到开发板中,既可以观察结果,当然此时是没有文件系统的支持,
内核肯定是启动不起来的。
为了开始内核代码的移植,首先必须得了解内核的启动过程。
内核最先执行的代码是在arch/arm/kernel/head.S文件,该文件只需要关注下面的一段代码:
.section ".text.head", "ax"
.type stext, %function
ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
&nbs ......
主要看了Linux完全注释那本书,终于准备攻读Linux内核源码了,先看了第二张的总体概念,感觉操作系统有很多东西还真是大同小异,记得ucos就是有一个叫做快表的东西,里面最多可以表示64个进程,而早版的Linux(0.11)也有这个一说的东西。
在Linux中也有一个PCB来表示每个进程,在这个结构体中,有指向任务代码的指针,有指向任务数据的指针,还有指向堆栈段地址(这个栈空间用来保存该进程在CPU中的各个寄存器的值,在进程调度的时候使用,是在内核栈空间上的),还有进程的任务状态段信息结构(tss_struct)
以上是Linux操作系统中进程所拥有的各种状态和相互关系(0.11内核)
其中:可中断睡眠是可以被软终端所唤醒的,我现在的理解是可以被用户空间的程序所唤醒。不可中断睡眠状态是不能被软终端唤醒的,他只能等待调度程序的唤醒或者硬中断的到来。
进程间切换:
在这里面有几个概念先解释一下
GDT:全局描述符表 在我理解来看就是存放所有进程PCB的指针或者就象图里面画的是 每个进程的TSS的描述符。
TSS:任务状态段 任务状态段用于保存相应进程在CPU中的寄存器的值
LDT:局部描述符 ......