栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Notes12】Linux系统启动过程,数据库,驱动,i2c-tools

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Notes12】Linux系统启动过程,数据库,驱动,i2c-tools

文章目录

1.Linux系统启动过程:ukr,ubuntu开机引导文件/etc/default/grub2.数据库:存储过程(PL/SQL代码集,像没有返回值的自定义函数)和函数需要用户显示调用才执行,而触发器是由一个事件来触发运行,当某个事件发生时会自动地隐式运行,不能被显示的调用

2.1 数据库优化:项目管理PMP证书,数据库DBA/OCM(Oracle Certified Master)证书2.2 数据库备份和恢复:冷热备份2.3 数据库精度:高精度数据用SQL Server数据库2.4 MySQL开发函数:having,where,group by,max,min,sum,count,case where-end,order by,sort by,distinct2.5 查询上个月数据:DATE_SUB(),CURDATE() 3.字符设备驱动:编译做的事:预处理(语法检查),编译(.c->.s汇编文件),汇编(.s->.o二进制文件),链接(多个.o合并成1个执行文件)4.i2c-tools使用:/sys/bus/i2c/devices/0-000d/sys_led_color,/sys/bus/i2c/devices/26-0049


1.Linux系统启动过程:ukr,ubuntu开机引导文件/etc/default/grub




内核(=操作系统)怎样启动第一个应用程序:1.open(dev/console,printf/scanf/err)等设备文件。2.run_init_process函数如下。最小根文件系统:1.dev/null和dev/console两个文件,2.init程序->busybox,3./etc/inittab即配置文件,4.配置文件中指定的程序,5.C库(应用程序用到)。

init进程:是加载内核镜像文件后第一个进程,是Linux的根进程,所有的系统进程都是它的子进程。运行级别:0(init0关机),1(单用户模式,只允许root用户对系统维护),2到5(多用户模式,3为字符界面,5为图形界面),6(init6重启)。

busybox:ls这些命令相当于应用程序(可执行二进制文件),成千上百个命令,源码找来再编译,显然很费事。busybox是这些命令的组合。想确定init进程做了什么事就要看busybox的源码。在kernel挂载根文件系统后,运行的第一个程序是根目录下的linuxrc,实际是一个指向/bin/busybox的链接, 也就是说系统起来后运行的第一个程序是busybox本身。busybox首先解析/etc/inittab这个进行初始化的配置文件, 然后调用/etc/init.d/rcS, 最后是执行/etc/profile(/etc/profile.d , ~/.bashrc , ~/.bash_file)。

2.数据库:存储过程(PL/SQL代码集,像没有返回值的自定义函数)和函数需要用户显示调用才执行,而触发器是由一个事件来触发运行,当某个事件发生时会自动地隐式运行,不能被显示的调用

冒泡,二分查找,sql多用group by。

2.1 数据库优化:项目管理PMP证书,数据库DBA/OCM(Oracle Certified Master)证书

缓e索1永,引1小固n,e is rj分。

3.1 数据库开启缓存,还要避免缓存失效如下第一行:

3.3 小结果集适合建索引。如果占表超过50%不适合建索引,因为数据量达到一定量后会走全表扫描:原因是mysql内部有一个优化器进行最优策略即聚集索引和非聚集索引查询原理,数据量太大会先走非聚集索引,然后才走聚集索引获取数据。太频繁加个redis。

3.4 有limit 1,查到一行就不继续往下走。

3.5 数据库创建完一次连接后会永久处于连接状态,已经永久连接了,apache还给数据库不断发连接,给数据库增加了压力,大公司会解决这个。

3.6 myISAM适合大数据量查询,因为进行update时会进行表锁,这时候读表都是无效的,必须等插入操作完成。innoDB与myISAM相反,且支持B树索引,ACID(事务原子性,一致性,,,),行锁。

3.7 大量insert或delete时会把表整个锁起来,导致大量web服务器请求过来进不去表,导致宕机,所以用limit进行拆分。

3.8 不同数据类型占用硬盘空间不一样,如果占用硬盘空间小且紧凑,这样硬盘数据读写快。

3.9 字段长度统一,数据库计算偏移量轻松。从前端查出来的数据会多出来一些空格,用trim去除空格再封装进对象。

3.10 报错:该对象属性不为null或mysql查询数据为null…,用’空格’。数据库一字段查出赋值到java对象上,如果字段为null会报空指针异常。

3.11 enum速度比varchar快。

3.12 不管任何方式查询表,最终都会通过主键定位到数据,建立主键会有效提高性能。id主键多用int速度比varchar快。

3.14 避免使用rand(),order by rand()把数据库累死。

3.15 两个字段类型不一致,索引建不上。

2.2 数据库备份和恢复:冷热备份

1.冷备份:适用于myisam引擎,不适用于innoDB引擎:关闭mysql,如下或可以点进book文件夹里将.frm(表结构)和.MYD(表数据)和.MYI(表索引)文件拷贝出来,这三个组合到一起就是一张表,恢复的时候只需把你copy出来的这些文件再重新粘贴回去即可。

2.热备份:执行mysql安装目录下的bin/里面的这个mysqldump.exe工具。mysqldump是工具 -u是用户名 -p是密码 -A是全部的意思 -d是表结构 -t是表数据 > 是重定向的意思 > 右边是需要输出的路径和文件名。
2.1 全备份:mysqldump -uroot -p123456 -A > /back/backdb.sql
2.2 备份指定库命令:mysqldump -uroot -p123456 db1,db2 > /back/backdb.sql
2.3 备份指定表命令:mysqldump -uroot -p123456 db1 tb1 tb2, db2 tb2> /back/backdb.sql
2.4 备份表结构命令:mysqldump -uroot -p123456 -A -d > /back/backdb.sql
2.5 备份表数据命令:mysqldump -uroot -p123456 -A -t > /back/backdb.sql
2.6 恢复:source命令在执行时会显示详细信息,能看到执行到哪出错了:source /back/backdb.sql
数据库界面化工具(sqlyog navicat)也可以备份,但是从来没用过,数据量太大用增量备份xtrabackup。

2.3 数据库精度:高精度数据用SQL Server数据库


float(8,6)小数点前面占2位,小数点后面占6位。

2.4 MySQL开发函数:having,where,group by,max,min,sum,count,case where-end,order by,sort by,distinct






如下同理RIGHT。

如下同理小写LOWER 。





如下右边先显示,后得到记录数。





















2.5 查询上个月数据:DATE_SUB(),CURDATE()


如上精确到日,需要将它格式化到月如下。

现在可以拿表中字段(datetime shijian)数据进行比较,shijian字段精确到秒需要格式到月份如下。


返回1为true,返回0为false。

如下只需要月份,所以用curdate()。

如下采用period_diff函数,也就是这个月跟字段shijian的间隔为1。

3.字符设备驱动:编译做的事:预处理(语法检查),编译(.c->.s汇编文件),汇编(.s->.o二进制文件),链接(多个.o合并成1个执行文件)


1.字符设备:串口,键盘,鼠标,帧缓存设备(LCD)。字节流形式串行顺序进行,至少要实现open,close,read,write等系统调用。应用程序可通过/dev下的文件系统结点访问字符设备,如:/dev/led,/dev/ttySAC0。音频芯片将数字信号转化为模拟信号得到声音,数据有顺序,也是字符设备。

2.块设备:硬盘,nandflash,SD卡,U盘。设备对数据处理按照若干块进行,一个块有固定大小,如4k(flash,页),512字节(硬盘扇区)。

3.网络设备:网卡中以帧传播,大小变动。链路层,ip层等层层解剖,最后数据报文变数据包(loopback设备即127.0.0.1,ping 127.0.0.1 -c 1 ,1为1次,从应用层转到协议栈再转到loopback设备,协议栈功能正常,返回完整包。loopback设备还能实现同一台设备不同进程通信,通过TCP Socket绑定127.0.0.1。ifconfig lo时可看到RX和TX接在一起)。如下开发板只要连电源,显示器HDMI,串口三个就能串口登录调试。


如下是应用程序led_test.c:向设备文件(/dev/myled0)写1灯亮,写0灯灭。打开一个文件会返回文件描述符,用数组记录。

如下是编译服务器,rootfs通过NFS网络共享挂载到开发板上。进入开发板rootfs文件夹里执行./a.out(先insmod 驱动.ko)。

如下是hello.c,make后生成hello.ko,insmod hello.ko会执行hello_init函数和main函数一样,hello_init函数里申请资源,如向内核申请内存,初始化gpio控制器,硬件初始化(关闭看门狗即定时器即3s没人关会重启整个系统,初始化时钟,初始化SDRAM)。应用程序退出有内核帮你释放你申请的资源,驱动程序需要hello_exit释放资源,rmmod hello时执行hello_exit函数。

设备文件 - 设备号 - cdev。



如下是hashmap数据结构。

如下在内核源码中。


Linux用inode记录文件的信息。

4.i2c-tools使用:/sys/bus/i2c/devices/0-000d/sys_led_color,/sys/bus/i2c/devices/26-0049

i2c-tools工具是调试i2c,从开源网站http://dl.lm-sensors.org/i2c-tools/releases/下载i2c-tools,解压后修改makefile文件如下图,直接make进行编译。编译完成后在tools/文件夹下会有几个可执行文件:i2cdetect,i2cdump,i2cget,i2cset,将它们拷贝到机器上就可以调式了。

lyf,bus/器件/寄存器。


用i2cset设置单个寄存器值,用i2cget读取单个寄存器值,可以在初期调试时发挥很大作用,一旦有预期的现象出现,就可以用i2cdump读出整个寄存器的值,然后固化到代码中。

OS命令行查看BMC的ip:sudo ipmitool lan print 8。

i2c-test --scan -b 7
# i2c-test -b 7 -s 0x62 -m 1 -rc 2 -d 0x0
i2c-test -b 7 -s 0x62 -m 1 -w  -d 0x0 0x00
i2c-test -b 7 -s 0x62 -m 1 -rc 2 -d 0x8b

取消EEPROM写保护的BMC命令:
/etc/init.d/ipmistack stop
i2c-test --scan -b 7查找E6 i2c device 
i2c-test -b 7 -s 0x73 -w -d 0x08
i2c-test -b 7 -s 0x71 -w -d 0x01
i2c-test -b 7 -s 0x10 -m 1 -rc 1 -d 0x31 0x55
/etc/init.d/ipmistack start

OS下执行命令烧写FPGA FRU :ipmitool fru write 8 FRU.bin
OS下执行命令show FRU信息 :ipmitool fru print 8




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号