Linux Is A Popular Operating System For Many applications
Linux is one of the most popular operating systems for many application areas, such as web hosting, cloud computing and embedded system development. In the field of embedded system development, the Linux serial port (also known as the UART) can be used for communication between different devices, such as a microcontroller and PC. This article will provide an overview of how to program a serial port in Linux as well as provide some sample code.
To program a serial port in Linux, one needs to access different parts of the system. First, the appropriate permissions should be set to allow the user to access the serial port. Then, the serial port needs to be opened and configured. After that, the read and write operations can be performed. For a detailed example, we’ll use the sysfs interface to access the UART.
We’ll start by setting the device permissions. For example, set the permission for the user to access the serial port using the command:
sudo chmod 666 /dev/ttyS0
This will allow both read and write access to the serial port.
Next, the serial port must be opened, configured and ready for data transfer. The design of the serial port will depend on the specific application, but for our example we’ll use the following:
// open serial port
int fd = open(“/dev/ttyS0”, O_RDWR | O_NOCTTY);
if(fd
printf(“Error %d opening /dev/ttyS0: %s\n”, errno, strerror(errno));
exit(1);
}
// configure the serial port
struct termios settings;
tcgetattr(fd, & settings);
cfsetispeed(&settings,B115200);// Changing the input baud rate
cfsetospeed(&settings,B115200);// Changing the output baud rate
settings.c_cflag &= ~PARENB; //No Parity
settings.c_cflag &= ~CSTOPB; //1 stop bit
settings.c_cflag &= ~CSIZE; //Character size mask
settings.c_cflag |= CS8; // 8 data bits
settings.c_cflag &= ~CRTSCTS;//No HW flow-control
settings.c_iflag &= ~(IXON | IXOFF | IXANY); //No SW flow-control
settings tcsetattr(fd,TCSANOW,&settings);//Apply to settings
Once the serial port is configured, data can be sent or received on the serial port. In this example, we’ll define a function to send data to the serial port:
int serial_write(int fd, unsigned char *buffer, int length) {
int bytes_sent = 0;
//write data to serial port
bytes_sent = write(fd, buffer, length);
return bytes_sent;
}
For the write operation, a byte array should be passed to this function that contains the data to be sent. Similarly, a read operation can also be performed in Linux:
int serial_read(int fd, unsigned char *buffer, int length) {
int bytes_read = 0;
// read data from serial port
bytes_read = read(fd, buffer, length);
return bytes_read;
}
In the read function, the data received from the serial port will be stored as a byte array in the buffer. The length parameter can be used to specify the number of bytes to be read from the serial port.
Finally, once the data has been read or written, the serial port should be closed:
// close serial port
close(fd);
Using the methods presented in this article, one can easily program a serial port in Linux for communication between different devices. It is important to take care when using any of the methods presented here, as improper configuration or usage can lead to unexpected results.