linux系统

18、Linux下编程风格

不问归期 提交于 2020-03-18 07:17:08
在前面曾总结过微软环境下编程的规范【1】,但是在linux下,没有自动补起,以及没有像VS那样高级好用的可视化开发工具,如果变量,函数定义太复杂,敲的也累,下面总结linux下编程风格,资料来源于网络。 一、GNU风格 1.函数返回类型说明和函数名分两行放置,函数起始字符和函数开头左花括号放到最左边, 例如: static char * main (argc, argv) int argc; char *argv[]; { ...... } 或者是用标准C: static char * main (int argc, char *argv[]) { ...... } 如果参数太长不能放到一行,请在每行参数开头处对齐: int net_connect (struct sockaddr_in *cs, char *server, unsigned short int port, char *sourceip, unsigned short int sourceport, int sec) 对于函数体,我们应该按照如何方式排版: 在左括号之前、逗号之后,以及运算符号前后添加空格使程序便于阅读 ,例如: if (x < foo (y, z)) haha = bar[4] + 5; else { while (z) { haha += foo (z, z); z--; } return +

Linux 内核链表 list.h 的使用

人盡茶涼 提交于 2020-03-18 07:15:46
Linux 内核链表 list.h 的使用 C 语言本身并不自带集合(Collection)工具,当我们需要把结构体(struct)实例串联起来时,就需要在结构体内声明指向下一实例的指针,构成所谓的“链表”。而为了实现对链表的操作,我们需要另外实现一系列的函数,例如添加、删除、搜索、复制等等。而利用 Kernel 源代码中自带的 list.h,则可以方便地实现任意类型结构体的串联。 编程需求 假设我有一个表示学生资料的结构体: #define MAX_STRING_LENGTH 50 typedef struct student { char first_name[MAX_STRING_LENGTH]; char last_name[MAX_STRING_LENGTH]; unsigned int age; } student_t; 传统的做法,当我们需要将一系列学生的数据串联起来,那我们需要在该结构体内部添加一枚指针: typedef struct student { char first_name[MAX_STRING_LENGTH]; char last_name[MAX_STRING_LENGTH]; unsigned int age; struct student *next; /* Look at dis ;p */ } student_t; 几乎每位 C

linux文件系统的移植-制作JFFS2文件系统

感情迁移 提交于 2020-03-18 07:14:54
  JFFS2全名是 Journalling Flash File System Version2,是Redhat公司开发的快闪存储器(简称:闪存;英文: Flash Memory)的档案系统 [1] ,其前身是JFFS, 最早只支援NOR Flash, 自2.6版以后开始支援NAND Flash, 极适合使用于嵌入式系统。 JFFS2 功能如下: 支援 NAND flash 装置。 硬连结(Hard links)。这是JFFS 碍于文件格式所无法支援的功能。 压缩。有三种算法: zlib, rubin 以及 rtime. 更佳的效能。 缺点: JFFS2在挂载(mount)时会扫描整个flash 所有的资料,再将档案系统目录储存在system memory, 会线性倍数成长,消耗很多时间。 JFFS2没有write-back机制,不能将资料暂存于缓存(cache), 以致于flash I/O的动作频繁。 JFFS2设计机制过于复杂,程式码不易阅读。 一、移植环境: 1、 Ubuntu 10.10发行版 2、 u-boot.bin 3、 目标机:FS_S5PC100平台 4、 交叉编译器 arm-cortex_a8-linux-gnueabi-gcc ------------------------------------------------------------------

Linux内核启动:setup_arch

喜夏-厌秋 提交于 2020-03-18 07:14:09
BootLoader 可以向 Linux 传递参数,编译内核时也可以配置 boot options 。 调试中使用的 U-Boot bootargs 如下: noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M 内核版本: 2.6.35.7 内核的处理参数的整体过程如下: ① u-boot 将配置参数地址通过寄存器传递给内核 ② 内核 (arch/arm/kernel/head-common.S 中的 __mmap_switched) 将这个地址存入 __atags_pointer( 定义于 arch/arm/kernel/setup.c) ③ setup_arch() 函数 [html] view plain copy print ? < span style = "font-size: 14px;" > void __init setup_arch(char **cmdline_p) { struct tag * tags = (struct tag *)&init_tags; struct machine_desc *mdesc; char * from = default_command_line ; 编译内核时配置的Boot Options unwind_init();

linux源码“.config”文件分析

非 Y 不嫁゛ 提交于 2020-03-18 07:13:16
一、.config文件概述 .config文件是linux内核配置文件,当执行#make uImage编译生成内核时, 顶层的Makefile会读取.config文件的内容,根据这个配置文件来编译所定制的内核。 二、.config文件关联 1 文件关联图 以CONFIG_DM9000为例进行说明。 在#make menuconfig中选择使用CONFIG_DM9000,然后在配置文件.config中就会有对应的项设置成为y或者m。 在#make uImage编译内核时,顶层Makefile会根据.config的配置生成两个配置文件: include/linux/autoconf.h include/config/auto.conf 其中,autoconf.h是C语言头文件主要影响C文件的编译。 auto.conf会被顶层Makefile所包含,然后传递到底层Makefile中从而影响到底层文件的编译。 2 关联文件部分内容展示 1、.config # # Automatically generated make config: don ' t edit # Linux kernel version: 2.6 . 30.4 # Wed Apr 2 16 : 21 : 56 2014 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y

Linux优美代码赏析0.0:Makefile

你离开我真会死。 提交于 2020-03-18 07:10:55
首先阅读根目录下的makefile: 1.编译器设置 ARCH : = arm CROSS_COMPILE : = $(shell if [ - f .cross_compile ]; then \ cat .cross_compile; \ fi) 此处说明交叉编译器定义在.cross_compile文件中 2.生成依赖: SRCARCH : = $(ARCH) #主目标 all: vmlinux   #下面文件引入架构相关的编译目录 include $(srctree) / arch / $(SRCARCH) / Makefile #下面引入系统相关的编译目录 # Objects we will link into vmlinux / subdirs we need to visit init - y : = init / drivers - y : = drivers / sound / firmware / net - y : = net / libs - y : = lib / core - y : = usr / core - y += kernel / mm / fs / ipc / security / crypto / block / vmlinux - dirs : = $(patsubst %/ , % ,$(filter %/ , $(init - y) $

linux内核移植s3c2410,准备工作,继续

大兔子大兔子 提交于 2020-03-18 07:10:12
vmlinux在链接时,使用的文件是在vmlinux-all中定义的所有文件,链接俄脚本是在arch/arm/kernel/vmlinux.lds中定义该如何 链接这些文件。 总结上面: 真个的 linux的源码是通过Makefile来实现项目的 管理的,顶层的Makefile定义了那些文件夹 中的 内容 被编译进内核,各级 的子目录下的Makefile决定该目录下的那些文件被编译进内核。 对于编译选项的设置的话,存在全局的,局部的和仅对一个文件 起作用的选项。 3.内核的Kconfig文件的 分析 在linux内核目录下,如果直接使用make menuconfig的话,出现的配置界面就是使用的是Kbuild来实现的。最终通过make menuconfig生成的.config文件,最终这个.config文件被Makefile读取。具体的信息可以参见Documentation/kbuild/kconfig-language.txt 4.linux内核的配置选项 参考: http://www.chinaunix.net/jh/4/1051808.html http://www.linuxfocus.org/ChineseGB/July2002/article252.shtml 有十分丰富的资料。下面只是简单的介绍一下。 Code maturity level options --

在fedora下面安装ftp服务器

此生再无相见时 提交于 2020-03-18 07:02:58
Fedora版本:Fedora 12 1. 安装vsftp [java] view plain copy #yum install vsftpd 一路yes,最后提示安装成功。 2. 配置vsftpd.conf。 [java] view plain copy #vi /etc/vsftpd/vsftpd.conf 将vsftpd.conf文件中的主要设置如下: [java] view plain copy anonymous_enable=YES #允许匿名访问 local_enable=YES #允许本地用户访问(/etc/passwd中的用户) write_enable=YES #允许写入权限,包括修改,删除 anon_upload_enable=YES #允许匿名用户上传 anon_mkdir_write_enable=YES #允许匿名用户建立目录 ascii_upload_enable=YES #允许ascii上传 ascii_download_enable=YES #允许ascii下载 3. 启动vsftp [java] view plain copy #service vsftpd start 4. 让vsftpd自启动 [java] view plain copy #chkconfig --level 2345 vsftpd on #chkconfig --list

Linux centosVMware MySQL主从介绍、准备工作、配置主、配置从、测试主从同步

一笑奈何 提交于 2020-03-18 06:26:10
一、MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启binlog才能进行主从。 主从过程大致有3个步骤 1)主将更改操作记录到binlog里 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 3)从根据relaylog里面的sql语句按顺序执行 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地 MySQL主从原理图 三、配置主 安装mysql 修改vi /etc/my.cnf,增加server- id = 101和log_bin = davery1 报错,需要把 /data/mysql 和/usr/local/mysql 的数组数主都改一下 cd /usr/local/mysql chowen -R mysql.mysql . chown -R mysql.mysql /data/mysql 修改完配置文件后,启动或者重启mysqld服务 /etc/init.d/mysqld restart cd /data/mysql

Linux中安装RabbitMQ演示

独自空忆成欢 提交于 2020-03-18 05:25:39
在Linux中安装RabbitMQ演示,以VirtualBox中的虚拟机为操作系统载体 操作系统版本为CentOS7,纯净未安装RabbitMQ 以root用户安装 su - root 安装 wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm yum install epel-release yum install erlang wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm 管理 service rabbitmq-server start service rabbitmq-server status 安装管理控制台 rabbitmq-plugins enable rabbitmq_management 重启RabbitMQ service rabbitmq-server stop service rabbitmq-server start