Latex排版全解
Latex排版全解
LATEX(英语发音:/ˈleɪtɛk/ LAY-tek或英语发音:/ˈlɑːtɛk/ LAH-tek,音译“拉泰赫”),是一种基于TEX的排版系统,由美国电脑学家莱斯利•兰伯特在20世纪80年代初期开发,利用这种格式,即使用户没有排版和程序设计的知识也可以充分发挥由TEX所提供的强大功能。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的邮件到完整书籍的所有其他种类的文档。
和Microsoft Office Word 等所见即所得的办公软件不同,用LATEX 排版文档,首先要用文本编辑器编辑好tex 文档,然后通过各种程序编译,得到pdf 文档用于打印或者阅读。基本的排版流程如下图:
一般我们经常用pdflatex 或者xelatex 程序直接从tex 文件生成pdf 文件。如果是中文tex 文档,优先使用xelatex 程序编译。
WinEdt是一款Microsoft Windows平台下的文本编辑器。它主要是用来创建TeX(或者LaTe ...
Kconfig文件语法分析
Kconfig文件语法分析
Kconfig是进行各种大型项目配置的关键文件,用于生成menuconfig的界面并生成最终确定编译选项的.config文件。关于Kconfig文件的编写规则,linux内核中一般会在Documentation/kbuild/kconfig-language.txt中有详尽的叙述。这里主要用linux内核配置的实例进行语法分析。
config
确定了条目前面是否有选项,menuconfig界面中的条目中一共有3种主动选项,分别是[ ],< >和( ),分别表示"被编译进内核or舍弃",“编译进内核or编译成模块or舍弃”, “按照提示输入一个数字”,分别对应Kconfig文件中的bool,tristate和int。{ }和- -属于被动选项,是配置系统根据依赖关系自动生成的选项,不能被手动修改。
menu/endmenu
即图形界面中有--->的条目,回车后可以展开。条目前面没有选项
menuconfig
是menu和config的结合体,既在前面有选项,回车后也可以展开。
choice ...
构造根文件系统
构造根文件系统
一、流程分析
回顾Linux内核启动流程中提到的流程:
start_kernel:
中断初始化、时钟初始化、打印内核版本信息
处理uboot传进来的启动信息
处理命令行信息
调度初始化等各种初始化
挂接根文件系统rest_init
创建kernel_init线程
早期的用户空间初始化prepare_namespace
挂载根文件系统mount_root
初始化某些设备init_post
打开/dev/console设备
标准设备设置
12(void) sys_dup(0);(void) sys_dup(0);
执行应用程序
1234567891011if (execute_command) { run_init_process(execute_command); printk(KERN_WARNING "Failed to execute %s. Attempting " "defaults...\n", execute_comman ...
Linux内核启动流程
Linux内核启动流程
一、配置及编译
配置
三种方法配置:
直接输入 make menuconfig 命令,从头到尾重新配置菜单 (非常复杂)
make menuconfig时修改配置项,最终的配置结果会保存在.config文件中,这主要是Kconfig的功能,
再执行make menuconfig时就可以回去读取.config文件。这是内核配置的过程。
通过make xxx_defconfig命令在默认的配置上进行修改,然后再输入make menuconfig配置菜单
可以使用,使用 find –name \*defconfig 命令查找所有带defconfig名字的文件.
使用厂家提供的配置config_ok文件
在linux-2.6.22.6目录下,使用cp config_ok .config将config_ok复制覆盖新的.config隐藏文件(通过 ls -la 命令可以查看.config隐藏文件),
最后执行make menuconfig时就可以回去读取.config文件
可见,最后的配置文件为.config文件。该配置文件通过make uImage ...
u-boot分析与使用
u-boot分析与使用
零、U-boot使用
uboot 命令中输入的数字均为十六进制,而非十进制,注意!!!
0.1信息查询命令
buinfo:查看板子信息
printenv:查看环境变量(直接输入print也行)
version:查看uboot版本号
0.2环境变量相关操作
setenv:新建、删除、设置或者修改环境变量的值
1setenv [变量名] [变量值]
如果变量值中有空格,可以用单引号'括起来:
1setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv:保存修改后的环境变量
0.3内存操作
md
内存查看命令,用于显示内存值
123md[.b, .w, .l] address [# of objects]#eg:md.b 80000000 10
命令中的[.b .w .l]对应 byte、 word 和 long,即分别以 1 个字节、 2 个字节、 4 个字节来显示内存值。 address 就是要查看的内存起始地址, [# ...
u-boot分析与使用
u-boot分析与使用
一、Makefile结构分析
1、make 100ask24x0_config配置芯片类型
打开u-boot-1.1.6/Makefile文件,发现:
123456SRCTREE := $(CURDIR) *CURDIR是make的内嵌变量, 为当前目录......MKCONFIG := $(SRCTREE)/mkconfig......100ask24x0_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
上述$(SRCTREE)等于$(CURDIR),也就是当前目录u-boot-1.1.6,所以MKCONFIG=./mkconfig
上述$(@:_config=)的结果就是将 “100ask24x0_config” 中的 “_config” 去掉, 结果为 “100ask24x0” 。
实际执行:
12mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 $0 ...
各种存储器的区别
各种存储器的区别
参考链接:
系统移植篇之uboot P27 DDR内存的基本原理1、2、3
看懂uboot的神秘面容 P27 DDR内存的基本原理1、2、3(内容与上面一致 防止视频失效)
存储器可以分为很多种类,其中根据掉电后数据是否丢失可以分为易失性存储器RAM(Random Access Memory,随机存取存储器)和非易失性存储器ROM (Read Only Memory,只读存储器),均为半导体存储器。其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失。人们通常所说的内存即指系统中的RAM。
RAM
RAM 有两大类,一种称为静态 RAM (Static RAM,即SRAM),SRAM 速度非常快,是目前读写最快的设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,比如CPU的一级缓冲,二级缓冲。另一种称为动态 RAM(Dynamic RAM,即DRAM),DRAM保留数据的时间很短,速度也比 SRAM 慢,不过他还是比任何的 ROM 都要快,但从价格上来说 DRAM 相比 SRAM 要便宜很多,计算机内存就是 DRAM。
DRAM
...
RTC驱动分析
RTC驱动分析
linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c
1、入口函数s3c_rtc_init分析
进入./drivers/rtc/rtc-s3c.c,找到入口函数,如下所示:
1234567891011121314151617181920static struct platform_driver s3c2410_rtcdrv = { .probe = s3c_rtc_probe,//.probe函数 .remove = s3c_rtc_remove, .suspend = s3c_rtc_suspend, .resume = s3c_rtc_resume, .driver = { .name = "s3c2410-rtc", .owner = THIS_MODULE, },};static char __initdata banner[] = "S3C24XX RTC, (c) 2 ...
字符驱动设备的另一种写法
字符驱动设备的另一种写法
零、常用函数、宏汇总
设备号相关
123456#define MINORBITS 20 //次设备号的占位数目#define MINORMASK ((1U << MINORBITS) - 1)//低20位的掩码,相当于0xfffff#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) //得到主设备号#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) //得到次设备号#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) //将主,次设备号重新“合成”为一个数,返回
内核空间、用户空间之间的数据传递
内核空间–>用户空间
1static inline long copy_to_user(void __user *to, const void *from, unsigne ...
二维数组与指针的一些问题
二维数组与指针的一些问题
12345678910111213141516171819#include<stdio.h>int main(){ int A[2][3] = { {1,2,3}, {4,5,6} }; printf("=========================\n"); printf("A[0][1]:%d\n",A[0][1]); printf("*(*(A+0)+1):%d\n",*(*(A+0)+1)); printf("=========================\n"); printf("&A[1][0]:%d\n",&A[1][0]); printf("*(A+1):%d\n",*(A+1)); printf("=========================\n"); printf( ...