`
本帖最后由 donatello1996 于 2020-4-30 09:48 编辑
这两天在弄HDMI图形输出驱动,没搞出啥东西出来,官方的weston图形界面例程太高端了,还得求助一下哪位用过的大佬,先放下这个之后再弄,先弄好能弄的地方。
现在板子装好了Debian文件系统,可以随时apt下软件,首先得下方便开发的三大软件:
- apt install samba gcc make
三个软件功能三位一体,若要方便开发,相互之间环环相扣不能缺少一个,首先说下Samba是桑巴服务器,用于在发行版Linux系统上搭建Windows家族可直接以ftp协议访问的软件,这个不是简单的SFTP/TFTP协议应用,而是Windows系统只需要在资源管理器上输入(IP地址)(自定义路径)格式的路径,就可以像访问自己硬盘文件那样很方便地访问Linux系统的文件,看看效果就知道:
安装samba的过程很简单,只需要添加用户,新增密码文件,然后输入两次密码即可:
- touch /etc/samba/smbpasswd
- smbpasswd -a root
然后在/etc/samba/smb.conf文件的后面添加关键字:
- [share]
- path = /home
- available = yes
- browseable = yes
- public = yes
- writable = yes
- guest ok = yes
-路径字段为share,即刚刚的自定义路径,比如
开发板的IP地址为192.168.1.5,则在资源管理器输入192.168.1.5share
-如果把路径字段改为别的,比如我可以改成[donatello],那么我就在资源管理器输入192.168.1.5donatello,可以访问相应的内容
-path = /home即Samba登录成功之后的路径
-available = yes即可访问路径
-browseable = yes可从外部浏览
-public = yes 用法跟available差不多
将smb.conf文件保存,可以在/etc下看到改变(这只是为了确保文件的修改是生效的而已),使用
命令就可以了:
要测试smb.conf的设置在Linux系统上面是否生效,还需使用
命令去测试,在输入回车进行dump导出之后,能看到类似这样的设置字段就说明Samba服务初始化设置正确了:
板子Linux部分的搭建完毕了,就轮到Windows系统的设置了,一般情况下Windows系统默认是允许Samba远程访问的,默认访问端口也是开的,但有时候会因为一些安全性设置而导致访问失败,这里需要检查Windows功能选项是否打开Samba1.0应用层协议的开关,我刚弄好Samba的时候访问不了,就是这个原因:
现在板子有了Samba访问的便利,又安装了GCC和make功能,我就可以直接在板子上面搭建我自己的代码工程了。由于我使用openssl库开发一些应用,所以如果开发板要支持openssl驱动头文件的话,需要安装libcrypto库,装好这个库之后,就可以直接使用系统的API函数去做AES加密,AES-CMAC完整性保护验证等应用了:
- apt install openssl
- apt install libssl-dev
-一般而言后面带-dev后缀的库都是在代码里面直接包含模块化头文件的库,如#include
#include
-并在系统lib目录中搜索libssl.soxxx等驱动库文件,i2c-dev之类的库同理
直接在开发板的文件路径下创建一个Source Insight的工程文件:
写一段简单的代码验证一下AES加密库:
#include
#include
#include
#include
#include
#include
#include "my_gpio.h"
#include
#include
int encrypt(unsigned char* plaintext, int plaintext_len, unsigned char *key,
unsigned char *iv, unsigned char *ciphertext)
{
EVP_CIPHER_CTX *ctx;
int len;
int ciphertext_len;
ctx = EVP_CIPHER_CTX_new();
EVP_Encryptinit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv);
EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len);
ciphertext_len = len;
EVP_EncryptFinal_ex(ctx, ciphertext + len, &len);
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
return ciphertext_len;
}
int decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
unsigned char *iv, unsigned char *plaintext)
{
EVP_CIPHER_CTX *ctx;
int len;
int plaintext_len;
if (!(ctx = EVP_CIPHER_CTX_new()));
if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv));
if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len));
plaintext_len = len;
if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len));
plaintext_len += len;
/* Clean up */
EVP_CIPHER_CTX_free(ctx);
return plaintext_len;
}
int main(int argc, char const *argv[])
{
unsigned char *key = (unsigned char *)"01234567890123456789012345678901";
unsigned char *iv = (unsigned char *)"0123456789012345";
unsigned char * plaintext =(unsigned char *)"电子发烧友论坛 donatello1996";
unsigned char ciphertext[128];
unsigned char decryptedtext[128];
int decryptedtext_len, ciphertext_len;
printf("Plaintext is:%s
", plaintext);
ciphertext_len = encrypt(plaintext, strlen((char *)plaintext), key, iv,
ciphertext);
printf("Ciphertext is %d:%s
", ciphertext_len,ciphertext);
decryptedtext_len = decrypt(ciphertext, ciphertext_len, key, iv,
decryptedtext);
decryptedtext[decryptedtext_len] = '