osc build编译 /usr/bin/strip: unable to copy file '/home/abuild/rpmbuild/BUILDROOT/sysmonitor-kmod-1.3.2-1.0.hp22.x86_64/usr/bin/sysmonitor'; reason: Permission denied [ 59s] error: Bad exit status from /var/tmp/rpm-tmp.dZwFXz (%install)
时间: 2023-08-01 22:12:08 浏览: 107
这个错误提示表明在执行 `osc build` 编译过程中,`/usr/bin/strip` 工具无法复制文件 `/home/abuild/rpmbuild/BUILDROOT/sysmonitor-kmod-1.3.2-1.0.hp22.x86_64/usr/bin/sysmonitor`,原因是权限被拒绝。错误信息还提到在 `/var/tmp/rpm-tmp.dZwFXz` 脚本的 `%install` 部分出现了错误退出的状态。
这个问题可能是由于缺乏足够的权限导致的。在 Linux 系统中,`strip` 工具用于剥离二进制文件中的调试信息,以减小文件大小。你可以尝试以下解决方法:
1. 确保你有足够的权限执行 `osc build` 命令。如果是在普通用户下执行该命令,请尝试使用管理员或具有足够权限的用户执行。
2. 检查目标路径 `/home/abuild/rpmbuild/BUILDROOT/sysmonitor-kmod-1.3.2-1.0.hp22.x86_64/usr/bin/sysmonitor` 的权限设置。确保你有读写权限。
3. 确保 `/usr/bin/strip` 工具存在并且可执行。你可以使用命令 `ls -l /usr/bin/strip` 来检查文件的权限和可执行性。
4. 确保你的构建环境设置正确,并且没有其他问题导致该错误。你可以尝试重新设置构建环境或者查看构建日志以获取更多详细信息。
希望以上方法能帮助你解决问题。如果问题仍然存在,请提供更多的上下文信息,以便我能够更好地帮助你。
相关问题
写一个基于51单片机的c语言程序,遵循DL/T645-2007通信规约,传输时采用串口异步通信,有一位偶校验位和停止位
下面是一个基于51单片机的C语言程序,用于遵循DL/T645-2007通信规约,传输时采用串口异步通信,有一位偶校验位和停止位。需要注意的是,这只是一个简单的示例程序,具体实现方法和代码细节需要根据您的具体情况进行调整和修改。
```
#include<reg52.h>
#define FREQ_OSC 12000000UL // 12MHz的晶振频率
#define BAUD_RATE 2400 // 波特率为2400
sbit LED = P1^0; // 用于调试的LED灯
void UART_init(); // 初始化串口
void UART_send_byte(unsigned char byte); // 发送一个字节的数据
unsigned char UART_receive_byte(); // 接收一个字节的数据
unsigned char parity_bit(unsigned char byte); // 计算奇偶校验位
void main()
{
unsigned char buffer[32]; // 接收数据的缓冲区,最多32个字节
unsigned char len; // 接收到的数据长度
unsigned char i;
UART_init(); // 初始化串口
while(1)
{
// 接收数据
len = 0;
while(len == 0) // 等待接收到数据
{
len = UART_receive_byte(); // 接收数据长度
}
for(i = 0; i < len; i++) // 接收数据内容
{
buffer[i] = UART_receive_byte();
}
// 处理数据
// TODO: 根据DL/T645-2007通信规约的要求进行数据处理
// 发送响应数据
// TODO: 根据DL/T645-2007通信规约的要求,构造响应数据
// 并使用UART_send_byte()函数发送响应数据
}
}
void UART_init()
{
TMOD |= 0x20; // 设置定时器1为模式2
TH1 = 256 - FREQ_OSC / (32 * BAUD_RATE); // 计算波特率重载值
TL1 = TH1;
TR1 = 1; // 启动定时器1
SM0 = 0; // 设置串口工作模式为异步模式
SM1 = 1;
REN = 1; // 允许串口接收数据
EA = 1; // 允许中断
ES = 1; // 允许串口中断
}
void UART_send_byte(unsigned char byte)
{
SBUF = byte; // 将要发送的数据存入SBUF中
while(TI == 0); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
unsigned char UART_receive_byte()
{
unsigned char byte;
while(RI == 0); // 等待接收完成
byte = SBUF; // 读取接收到的数据
RI = 0; // 清除接收完成标志位
return byte;
}
unsigned char parity_bit(unsigned char byte)
{
unsigned char i;
unsigned char count = 0;
for(i = 0; i < 8; i++) // 统计1的个数
{
if(byte & (1 << i))
{
count++;
}
}
if(count % 2 == 0) // 判断奇偶性
{
return 1; // 偶校验,返回1
}
else
{
return 0; // 奇校验,返回0
}
}
// 串口中断服务函数
void UART_isr() interrupt 4
{
if(RI == 1) // 接收中断
{
RI = 0; // 清除接收中断标志位
}
if(TI == 1) // 发送中断
{
TI = 0; // 清除发送中断标志位
}
}
```
如单片机晶振频率为11.0592MHz,串口通信波特率,4800b/s,串口工作方式为1,请写出初始化程序
好的,这是一个串口通信的初始化程序,主要设置了波特率、数据位、校验位和停止位等参数。
```c
#include <reg52.h>
// 定义波特率常量
#define BAUDRATE 4800
// 定义串口参数常量
#define DATA_BITS 8
#define PARITY_BIT 0
#define STOP_BITS 1
// 定义晶振频率常量
#define FREQ_OSC 11059200
// 计算波特率发生器的值
#define BAUDRATE_GENERATOR (65536UL - FREQ_OSC / (32UL * BAUDRATE))
void main() {
// 设置波特率发生器
TMOD &= 0x0f; // 清除 T1 模式位
TMOD |= 0x20; // 设置 T1 为模式 2
TH1 = BAUDRATE_GENERATOR / 256;
TL1 = BAUDRATE_GENERATOR % 256;
// 设置串口参数
SCON = 0x50 | (PARITY_BIT << 4) | (STOP_BITS - 1) << 3;
// 开启串口中断
ES = 1;
EA = 1;
// 启动定时器 1
TR1 = 1;
while (1);
}
// 串口中断服务函数
void serial_isr() interrupt 4 using 1 {
// 处理串口接收数据
}
```
需要注意的是,该程序使用了定时器 1 来作为波特率发生器,因此在程序中需要设置定时器 1 的工作模式。同时,还需要启用串口中断并编写串口中断服务函数来处理串口接收数据。