Programming :: Device Driver Is Dropping Characters?
Sep 23, 2010
I wrote a small hello world type of character device driver. When I type echo -n "abcdef" > /dev/bond and do a cat /dev/bond then only last "f" of above input abcdef is displayed rest nothing is displayed. I asked this question earlier and some people suggested me some modifications I have done and experimented all that but I am unable to catch the error.
Here is the code
Code:
/* Necessary includes for device drivers */
#include <linux/init.h>
//#include <linux/config.h>
#include <linux/module.h>
I did searched you tube but my results were not great.I have 2 books on KernelProgramming.I feel I need if some where I can get a video tutorial which can help me to understand how to develop a Linux Device driver that will be great.I had a look at Greg Kroah Hartmans video lecture of developing patches on ......I have been reading books and a lot of stuff.So I wish if I could get a video lecture that would be better
Of course, it's Windows only, and XP only at that. However, the data that needs transferred between the device and the computer should be fairly basic, unless it offloads a lot of processing to the computer. I'm not a programmer, nor do I play one on TV, but I have written some fairly complicated microcontroller programs and some basic Java GUIs. Besides writing the actual code, how hard is it to do whatever needs done to make a Linux device driver, apart from the code to make the device work?
I've a problem with character device mounting. I've a character device module code. Here is the code
Code: /* chardev.c: Creates a read-only char device that says how many times * you've read from the dev file */ #if defined(CONFIG_MODVERSIONS) && ! defined(MODVERSIONS) #include <linux/modversions.h> #define MODVERSIONS
I have a user Application for transferring the data from one PC to the other PC using Ethernet Port, can we create a device driver for that ?? that means it should act like a virtual device, if we write data into /dev/some file, it should go the other PC
I was upgrading online through my android phone's easytether app. My phone rang, and I was bounced offline. When I came back the upgrade did not resume, and when I tried to start over, dpkg and whatever was busy so I closed all my windows and tried to reboot. This is where I ended up: Here is a screenshot:
i am trying learn to program linux kernel modules and smoothly transition in device driver programming. I have a year and a half worth of programming in C and have been using linux for years!! But my question is how do i compile a module? I got as far as coding it but am stuck as of now.
Here's the situation: I've got an eee pc 901 running Ubuntu 9.10 netbook remix. I'm using it to connect to a WPA-encrypted wireless network on a WRT54GL running dd-wrt. It mostly connects and works ok, but sometimes it just stops working for no apparent reason (the netbook still shows itself as connected), but you can't get anywhere until you manually disconnect and reconnect. Other times, it will drop the connection, and then quickly reconnect (or sometimes not). Obviously, this behavior is pretty irritating. At first I thought the problem was with the router, but I checked the logs there and they all seem fine, and other computers on the same router don't have this problem. Looking at "dmesg | tail" on my netbook, I see a lot of instances of the following error, which I'm thinking is probably the problem:
I searched for that error message and I found this Ubuntu bug report: [URL] that describes symptoms that match mine. In that report, a poster mentions that he compiled and installed a new version of the wireless driver from the Ralink website, and it fixed his problem. Do you think installing a new driver would be good? Or has that updated driver already been added to the kernel since that bug report was filed? I've never compiled a kernel module before.
One other thing, I also see repeated instances of these lines (or similar ones) in dmesg, which look like they could be related. Code: [44096.275923] RX DESC f30ca000 size = 2048 [44096.276885] <-- RTMPAllocTxRxRingMemory, Status=0 [44096.281404] --> Error 2 opening /etc/Wireless/RT2860STA/RT2860STA.dat [44096.281424] 1. Phy Mode = 0 [44096.281435] 2. Phy Mode = 0 [44096.309841] 3. Phy Mode = 0 [44096.314533] MCS Set = 00 00 00 00 00 [44096.316196] <==== RTMPInitialize, Status=0 [44096.316280] 0x1300 = 000a4260 [44096.401269] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=11) [44096.472502] ===>rt_ioctl_giwscan. 1(1) BSS returned, data->length = 116 [44096.472977] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=11) [44106.768056] ra0: no IPv6 routers present
After doing a clean base install of CentOS 5.3 on a test server, I started having problems with network disconnects. While SSH into the box, I would be intermittently disconnected from the SSH session. At first I thought it was my workstation, but after running ping tests from multiple machines on the network to the test box, it became apparent that the test box was dropping packets. When I lose my SSH connection, the pings also start timing out, for a few seconds, then start again. I increased the console logging and I can see when the ethernet port goes up and down when I physically disconnect the cable, but it does not go down or lose link when the disconnects occur. I changed the NIC ports being used and had the same result. I tried with a different switch with same result. I reinstalled CentOS 5.2 and the problem went away.
Upon further investigation, I found that CentOS 5.2 is using the e1000 driver for my NICs and CentOS 5.3 is using the e1000e driver. I resinstalled CentOS 5.3, and tried using the e1000 driver instead of the e1000e but it no longer detects my NIC's... apparently they moved the support from e1000 to e1000e. I have spent the last 3 days googleing for info on this problem and have not found a solution. Any recommendations? Should I submit a bug report?
As soon as i'm starting to copy a large file enough file (>700Mb) to my ubuntu box (connected to an Asus router via wifi) from a Windows 7 client (connected to router via ethernet cable) i get a dramatic drop in speed. upload starts at 1,0Mb/sec with a ping to ubuntu box at <1ms, and in 2 minutes it drops to 200kb/sec with a ping of over 1000ms! The ping increases with every second in a linear progression.
To exlude router as a possible problem copying to a windows 7 notebook connected to router via wifi results in an average of 2,7Mb/sec with an average ping of 150ms.
MB Model: Asus P5B Deluxe wifi OS: Ubuntu Server 9.10 + desktop installed Wifi configured via GUI
I am currently using fedora 11 kernel 2.6.29 version, i wanted to write device driver for usb to detect my own device. My project is radio with computer. My fm radio get connected to usb port so i need to write h/w interfacing program.
The error "USB device 6 (vend/prod 0x603/0xf2) is not claimed by any active driver." is in dmesg every time I connect my Logitech keyboard to my system. I also tried (all with the same error): - Memory stick - DVD-burner - Compaq mouse
I have installed live cd on usb pendrive. Everything works great. How can I find out which device driver it is using? Where are the device driver files stored? How do you specify the device driver when mounting a device?
I'm working on my ncurses application, written in C. I get user input through a loop which uses getchar(). I was able to recognize Ctrl-n by comparing the keypress to ASCII character 16, and this seems to work fine. However, if I noticed that the ASCII character for Ctrl-j (10) is the same as the Line Feed. I tested this, and if I press enter on the keyboard I get the same ASCII value as when I press Ctrl-j.
So, what do I do if I want Ctrl-j to mean something different in my program than pressing enter?The ncurses terminal mode is set to raw, with a 100 millisecond timeout, and keypad is on (I'm already using the up and down arrow-keys).
I see I'm finally posting an AWK question rather than an answer for a change I wanted to make an AWK script that would scramble all the characters in each field, but leave the first and last characters where they were.
In a file i have to grep for a particular word and cut 8 characters of that word and replace the last characters with space if it is _1.Eg: HP4350_1..i did grep|cut -c 2-9|but didn't know how to truncate the last two characters if its '_1'.i used tr '[_1] '[ ]'.but it replaced all the characters where there is a 'underscore' and 1 instead of'_1' together.
I'm trying to make a webpage that will display the bash variables I have in a file. These variables are used in a bash script that is run from on my server.The file looks like this:
I just started using eclipse. Ie, I followed all the instructions to set up C++ and run a simple hello world program.However, I seem to have hit a snag.When I build the solution I get an error. I realized where there should be a > there is a | instead. Every time I type > the | prints instead and I have no idea how to fix this.
I wrote a java program that writes strings to a file. The strings contain foreign language characters. When I run the program in Windows, the output file shows the foreign characters. However, when I attempt the same operation in Linux, the output file shows a white question mark in a black background instead of the foreign characters. The same Linux system could display the foreign characters if I copy the output file from Windows to Linux. I tried to create the output file using gedit that my program would then add additional strings to and chose Unicode-32 for encoding but still the same problem.
What could I do to get the program to display the foreign language characters from output text file?
How can I filter ASCII quotes( ' ) and double quotes ( " ) so that I can replace them with the UTF-8 equivalent?If I copy text from a Word Document(ASCII), and upload it to a web page with PHP. The Database(UTF-8) will replace these racters with incorrect character(s).I need some function that will replace these characters but I don't know how to differentiate the ASCII quotes and the UTF-8 Quotes without (somehow) converting the string to hex, then preg_replace'ing the hex code for the symbol.
I am working on an application that will convert English text into equivalent Indian language text. Since Unicode is the standard, I will be using it. In most of the western languages each code-value directly refers to the glyph index and placing the code-values side by side will give the required display. This one to one mapping is not possible in Indian languages where rendering syllables is required rather than rendering just consonants and vowels. Many of the complex characters are made up by combining several unicode values.
My question here is: How Linux renders this Unicode text correctly? More specifically, what package is used? I believe in Windows they use Uniscribe for rendering.I believe there will be an operating system library for handling the text rendering. Or do I need to write my own rendering engine? How programs like Firefox, GEdit shows unicode text? Do they also have proprietary engines for correct rendering?
For example, I have a file called "file" like this one: type=strongsubj len=1 word=absolve pos=verb stemmed=y priorpolarity=positive type=strongsubj len=1 word=unique pos=adj stemmed=n priorpolarity=neutral type=strongsubj len=1 word=absolutely pos=adj stemmed=n priorpolarity=neutral type=weaksubj len=1 word=taking pos=verb stemmed=y priorpolarity=positive type=weaksubj len=1 word=friend pos=noun stemmed=n priorpolarity=positive type=weaksubj len=1 word=usually pos=adverb stemmed=n priorpolarity=positive type=strongsubj len=1 word=purecolor pos=anypos stemmed=n priorpolarity=negative type=strongsubj len=1 word=accusingly pos=anypos stemmed=n priorpolarity=negative
I want to add the plural for the noun, for example if find this line: type=weaksubj len=1 word=friend pos=noun stemmed=n priorpolarity=positive will add one more line : type=weaksubj len=1 word=friends pos=noun stemmed=n priorpolarity=positive where we add "s" for the word friend I did try to do like that: <code> cat file | while read LINE ; do
set -- ${line} if [[ "${4#pos1=}" == "noun" ]];then #I tried this line but it doesn't work properly: v3==$(echo $line |sed 's/$3/$s') #I want to find the third word "word=friend" in that line and add "s" after that word # I don't know what command to add this new line "$v3" to the file ??? done </code>
Well, I have a web application in Linux server. All my Java codes are there. FYI, whenever user entered non-ASCII characters(e.g. ∞,�,�) in a text field in my web application, and I check the log of my Java code in Linux server, it returns weird characters.
Suppose user entered ∞ in the text field. I should get ∞ in my log too. However, I got weird characters in return.