my blog my blog

Category: 单片机
新装机实录(一)——NVME M.2 SSD RAID0

 

 

装机仍在进行时,感觉很多新东西可以搞一搞了。初定的计划就是NVME SSD RAID0+ASUS AURA光污染+硬管水冷。今天就来聊聊这个NVME SSD RAID0的组建和具体效果吧。

首先,说说平台,AMD的平台现在对NVME SSD RAID0暂时不支持,而且DDR4还得靠运气,这个其实挺折腾人的,还是Intel的方案更成熟,奶牛选的是Z270平台,z170平台应该是只支持单个NVME SSD硬盘,所以组RAID是不可以了,奶牛测试RAID0其实对于NVME SSD性能提升还是很大的,可是,换句话说就是过剩了,因为3GB/s的数据量我们根本达不到。

好吧,先说说整个过程,首先两块NVME SSD硬盘,插好,然后就是设置BIOS组RAID0,这个很简单,没有截图,把AHCI模式更改为RAID模式,然后把两个NVME SSD组成RAID0就可以了。奶牛这里说明下Asus的Z270平台的BIOS设置很有技巧,如果是单个NVME SSD硬盘,插第一个硬盘口,速度可能只有1.2GB/s的读取速度,因为BIOS中第一块硬盘默认是兼容模式,设置成PCIE模式后可以提升速度至1.7GB/s,然后第二个M.2插口默认速度是X2,可以设置为X4,但是当组成RAID0后,其实还是和不更改前相同,不过单M.2硬盘的可以参考看看速度上不来是什么原因。

然后就是系统安装了,启动U盘制作不解释,直接用原版安装镜像,然后到硬盘分区位置会有找不到硬盘的情况,这时候选择手动加载驱动,驱动也放在U盘里,下载F6flpy-x64.zip(64 位操作系统)/ f6flpy-x86.zip(32 位操作系统),千万不要迷信网上各种什么驱动,归根结底还得回到英特尔的快速存储技术上来,然后这两个压缩包解压到优盘上之后,从选择手动加载驱动加载后就可以正常安装了。最后看看具体速度效果吧:

好吧,就记录这些吧这次,光污染和水冷还在折腾中,硬管确实挺费工夫。

移植openssh至arm9嵌入式开发板

同学考研,买了块stmicroelectronic的arm9开发板没时间玩儿,就借给奶牛玩儿了,昨晚开始折腾,先从移植开始,最开始折腾的axel,比较容易移植。之后的今天就开始搞ssh的移植了,选择的openssh,从网上查了一些教程,虽然他们也写了也总结了,但是问题依旧是存在滴。好吧,奶牛就把自己做的总结下吧。 首先说移植的目的:有了ssh开机自动启动,就不用串口线来操作开发板了,可以节省很多时间,特别是文件传输的缓慢实在无法忍受。 移植过程: 下载相关源码: openssh:http://mirror.esc7.net/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz openssl:http://www.openssl.org/source/openssl-1.0.1c.tar.gz zlib:http://zlib.net/zlib-1.2.7.tar.gz 然后配置好交叉编译工具

  1. mkdir source package 
  2. mkdir package/zlib 
  3. mkdir package/openssl 
  4. mv openssh-6.p1.tar.gz openssl-1.0.1c.tar.gz zlib-1.2.7.tar.gz ./source 
  5. cd source 
  6. tar xzvf openssh-6.p1.tar.gz 
  7. tar xzvf openssl-1.0.1c.tar.gz 
  8. tar xzvf zlib-1.2.7.tar.gz 

1.编译zlib

  1. ./configure --prefix=/home/nenew/package/zlib 

修改Makefile

  1. CC=arm-linux-gcc 
  2. AR=arm-linux-ar 
  3. CPP =arm-linux-gcc -E 
  4. LDSHARED=arm-linux-gcc 

就是讲gcc ar用arm-linux-gcc arm-linux-ar来代替

  1. make 
  2. make install 

2.编译openssl

  1. ./Configure --prefix=/home/nenew/package/openssl os/compiler:arm-linux-gcc 

这里可以直接指定交叉编译器,如果想知道哪些编译文件可以直接支持的话,一般./configure –help就可以看到说明

  1. make 
  2. make install 

3.编译openssh

  1. ./configure --host=arm-linux --prefix=/usr/local/openssh --with-zlib=/home/nenew/package/zlib --with-ssl-dir=/home/nenew/package/openssl --disable-etc-default-login --disable-strip CC=arm-linux-gcc AR=arm-linux-ar 

指定好了prefix为安装的目标目录,zlib与ssl的路径也就是我们刚才的安装路径,最后指定交叉编译器

  1. make 

这里并不安装,理由是不需要安装,安装到本机也无法执行,因为我们是交叉编译,你也许会问,为什么不直接换个预置安装目录来安装呢?如果不动手做你是不会知道的,sshd启动的时候会去安装目录下的etc找配置文件滴,所以这个目录不要随便指定,网上那些教程很多这里的路径都是有问题的。 编译工作至此结束,可以开始移植openssh了。

  1. mkdir -p usr/local/openssh 
  2. cd usr/local/openssh 
  3. mkdir etc bin 
  4. cd ../../../ 
  5. cp scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan ./usr/local/openssh/bin 
  6. cp sshd_config ssh_config ./usr/local/openssh/etc 
  7. mkdir sbin bin 
  8. cp sshd ./sbin 
  9. cd bin 
  10. ln -s /usr/local/openssh/bin/scp 
  11. ln -s /usr/local/openssh/bin/sftp 
  12. ln -s /usr/local/openssh/bin/ssh 
  13. ln -s /usr/local/openssh/bin/ssh-add 
  14. ln -s /usr/local/openssh/bin/ssh-agent 
  15. ln -s /usr/local/openssh/bin/ssh-keygen 
  16. ln -s /usr/local/openssh/bin/ssh-keyscan 
  17. cd .. 
  18. mkdir -p usr/local/libexec 
  19. cp sftp-server  ssh-keysign usr/local/libexec 
  20. mkdir ../final 
  21. cp -r bin sbin usr ../final 
  22. cd ../final 
  23. tar czvf openssh.tgz ./ 

目录结构大体如下: openssh openssh移植 这就把需要拷贝的文件都准备好了,传到开发板的目录下,然后展开到/根。 这时候ssh并不能运行,还需要修改passwd与group文件,位置在/etc下,将sshd用户添加上。 passwd照着模样修改: sshd::15:50:::/bin/sh group照着模样修改: sshd:*:50: 这里的两个50要对应,是组的编号

  1. mkdir -p /var/run/sshd

然后就是配置ssh key了。

  1. cd /usr/local/openssh/etc 
  2. ssh-keygen -t rsa1 -f ssh_host_key -N "" 
  3. ssh-keygen -t rsa -f ssh_host_rsa_key -N "" 
  4. ssh-keygen -t dsa -f ssh_host_dsa_key -N "" 
  5. ssh-keygen -t ecdrsa -f ssh_host_ecdsa_key -N "" 

现在执行/sbin/sshd应该就可以正常启动了。 如果想自动启动需要增加启动脚本与启动项。 启动脚本位置:/etc/rc.d/init.d/ 启动项配置文件:/etc/init.d/rcS 如何修改可以自己参照里面的实例。 至此就已经完成了移植工作了。ssh可以正常链接。对了,这里建议修改sshd_config哦,把允许root登录与空密码选项打开,因为可以方便,这个不是服务器,不需要太高的安全级别。

 

 
单片机学习小结

 

这个学期的单片机课程告一段落了,不过我感觉这学期的单片机是大学学习的比较实用的一门课程了,至少从原理上知道如何去实现一些东西了,当然这学期的linux课程也有不少的帮助,在系统编程方面也有了浅薄的认识,今天来总结下单片机课程。

我认为呢,像单片机这种实践性很强的课程,单单看看课本是远远不够的~~~必须有个板子做,要不你可能永远都不知道那个led小灯是咋亮的。至少我是看了一些教程之后才知道可以直接往p0~p2口写引脚的,然后上电后单片机的引脚默认是高电平,要写0给它们,呃,虽然可能听着听简单的,但是书上未必讲那么全(估计是我们的课本比较烂,总是用自己老师写的书,-_–)

买个开发板吧,动手做做,哪怕是看看别人的代码,把代码下载到开发板上,做一遍看一遍分析一遍,你的收获都会远大于看课本。

从汇编开始吧,我觉得汇编其实很容易理解的,并没有想象中那么难(因为接触的也不是那种很深入的),就是赋值,跳转这些操作,但是你需要看懂为啥那么赋值那么跳转,要看懂算法就不是那么容易了。

有人推荐直接用c,其实我感觉呢,用c确实可以省事儿很多,而且代码更容易让人理解,不过有时候理解原理也很重要我觉得,至少我觉得寄存器那里确实需要仔细去理解的。

好吧,最后奉上一套板子的购买地址,以及两套资料,供想学习的朋友们下载跟购买。

51单片机卡发板购买:51+ARM+AVR三合一嵌入式学习板 51单片机开发板+2.6触摸彩屏  奶牛就买的这个,做工质量挺不错的,接口教程都挺丰富的

点此下载:51单片机教程下载(共10G)   强烈建议收藏下,我花了两天上传的

假期将近,各位童鞋假期愉快

 

今天考完了最后一门单片机,大三还有一个课程设计交完就算交代了,下学期来了就大四了,就正儿八经的是学长了,呃,时间匆匆了,朱老先生,你也觉得匆匆了哇,奶牛也觉得匆匆了,得学点儿啥,寻思着最好能留下点儿啥~~~

提前祝各位还是同学的童鞋假期愉快,奶牛最后一个暑假,要充实起来哇~~

只有电脑不离不弃

 

RT,我爱我滴电脑,我滴系统,你们最好了,你们不会罢工~~~

课程设计下来了,多路数据采集系统的设计,51+a/d转换+键盘+外扩存储+led显示,设计硬件,让人纠结,网上有不少范例,呃,明天开始弄,周五还要交~~~

天好热,各种出汗睡不醒。。。

睡鸟,最近好水

发一套51单片机资料(5G iso文件)

 

发一套51单片机的资料,是我自己买的板子送的,感觉还挺好的,转了iso分享上来。

用的115网盘(PS:不要骂俺用yunfile,俺也讨厌那东西),呃…

下面的广告各位也看到了哇,呃,如果有愿意的可以自愿捐赠资助本博客,文件我上传了6个来小时,多了就不解释了。

下载地址:http://115.com/file/bec23mx6            #学习光盘(HC6800EM3).iso

51单片机日记:说说长调短调及返回

 

每次仔细看遍书都会有收获。今天记录下子程序调用。其实呢,就是lcall或者acall到一个address,然后这时候其实sp指针是有动作的哦,然后通过ret可以将sp指针的变化弹到pc指针,回到程序,这个过程就是程序的调用啦。

 

  1.                ORG        1000H 
  2. Father:        MOV        A,        #0FFH 
  3.                LCALL      Son                   ;调用子程序 
  4.                LJMP       Father 
  5. Son:           ANL        A,        #0FH        ;高位清零 
  6.                RET                              ;返回主程序 

过程是这样子的,首先father进程把FFH赋值给累加器A,然后调用子程序,这时候PC=(PC)+3 ; SP=(SP)+1 ;(SP)=(PC)L ; SP=(SP)+1 ;(SP)=(PC)H ; 然后开始跳到子程序son,在RET的时候,SP先弹值到(PC)H,然后SP-1,再弹值到(PC)L,最后SP-1回到初值,这样子,PC就又变为LJMP语句所在的地址了,也就是从LJMP开始继续执行。

PUSH与POP哇,LCALL/ACALL与RET哇一定要成对使用避免错误产生~~~

51单片机日记:从最简单的点小灯开始

 

对于P0 P1 P2 P3的端口的写,直接送数即可。虽然可以查到这些端口的地址,但是是无法直接写数到地址的。所以也就不需要记住他们的地址鸟,直接往端口送数即可。如果想直接操作P2.0 P2.1这样的端口,用位操作即可。延时程序嘛就是给单片机一些数让它去循环,时间是循环次数*指令的周期/机器周期的结果。

 

  1.         ORG             000H 
  2.         LJMP            MAIN 
  3.         ORG             030H 
  4. MAIN:   MOV             P2,     #00H 
  5.         LCALL           DELAY 
  6.         SETB            P2.0 
  7.         LCALL           DELAY 
  8.         SETB            P2.1 
  9.         LCALL           DELAY 
  10.         SETB            P2.2 
  11.         LCALL           DELAY 
  12.         SETB            P2.3 
  13.         LCALL           DELAY 
  14.         SETB            P2.4 
  15.         LCALL           DELAY 
  16.         SETB            P2.5 
  17.         LCALL           DELAY 
  18.         SETB            P2.6 
  19.         LCALL           DELAY 
  20.         SETB            P2.7 
  21.         LCALL           DELAY 
  22.         LCALL           MAIN 
  23.  
  24. DELAY:  MOV             R5,     #04H 
  25. F3:     MOV             R6,     #0FFH 
  26. F2:     MOV             R7,     #0FFH 
  27. F1:     DJNZ            R7, F1           
  28.         DJNZ            R6, F2 
  29.         DJNZ            R5, F3 
  30.         RET 
  31.         END 

 
呃,其实自己也觉得代码有点儿傻,记录吧,一点点儿来~~~